当前位置: 首页 > 编程语言 > C#

如果不选择日期,如何设置datetimepicker为空值(c#winforms)分享

时间:2023-04-10 12:44:31 C#

如果不选择日期,如何设置datetimepicker为空值(c#winforms)Binding"bValue",newBinding(人,“BdayNullable”,真);dtBirthdayNullable.DataBindings.Add(b);b.Format+=newConvertEventHandler(dtBirthdayNullable_Format);b.Parse+=newConvertEventHandler(dtBirthdayNullable_Parse);voiddtBirthdayNullable_Format(objectsender,ConvertEventArgse){//e.Value是对象值,我们将其格式化为我们想要在控件中显示的内容Bindingb=senderasBinding;if(b!=null){DateTimePickerdtp=(b.ControlasDateTimePicker);如果(dtp!=null){如果(e.Value==DBvalue.value){dtp.ShowCheckBox=true;dtp.Checked=false;//必须将e.Value设置为SOMETHING,因为它作为NULL输入//如果我设置为DateTime.Today,这与控件的当前//值不同,那么它会触发对值的更改,这会检查box(notok)//诀窍-将e.Value设置为任何v控件当前具有的值。//这不会导致更改,并且复选框保持关闭状态。e.Value=dtp.Value;}else{dtp.ShowCheckBox=true;dtp.Checked=true;//保持e.Value不变-它不为空,因此DTP可以接受。}}}}voiddtBirthdayNullable_Parse(objectsender,ConvertEventArgse){//e.value是来自控件的格式化值。//我们将其更改为我们想要填充到对象中的值。绑定b=发送者作为绑定;if(b!=null){DateTimePickerdtp=(b.ControlasDateTimePicker);如果(dtp!=null){如果(dtp.Checked==false){dtp.ShowCheckBox=true;dtp.Checked=false;e.Value=DBvalue.Value}else{DateTimeval=Convert.ToDateTime(e.Value);e.Value=val;}}}}EDIT我找到了一个很好的解决方案http://blogs.interknowlogy.com/danhanan/archive/2007/01/21/10847.aspx另一个完美的解决方案http://www.mofeel.net/70-microsoft-public-dotnet-framework-windowsforms/8806.aspxDateTimePicker不能设置为空,因为DateTime不能为null,但您可以将它们设置为DateTime.MinValue,这是未初始化DateTime的默认值,然后您只需检查dtp.Value=DateTime.MinValue是否将其视为null。但是,如果想在没有选中值时真正区分,最简单的方法是将DateTimePicker.ShowCheckBox设置为true,然后检查dtp.Checked,如果是,则读取该值,否则将其视为null。您可以检查绑定源是否提供了“空日期”或您不想显示的日期值。如果是,请选择自定义格式:yourDTP.Format=DateTimePickerFormat.CustomyourDTP.CustomFormat=""添加“CloseUp”或“ValueChanged”事件处理程序以重置用户操作的格式:yourDTP.Format=DateTimePickerFormat.Short我喜欢ShowCheckBox选项。我会更进一步,用两种扩展方法包装它以避免重复并拥有更清晰的代码:publicstaticDateTime?NullableValue(这个DateTimePickerdtp){返回dtp.Checked?dtp.Value:(DateTime?)null;}publicstaticvoidNullableValue(thisDateTimePickerdtp,DateTime?value){dtp.Checked=value.HasValue;如果(value.HasValue)dtp.Value=value.Value;然后get和set代码如下:dtpSafetyApprover.NullableValue(model.SafetyApproverDate);//设置model.SafetyApproverDate=dtpSafetyApprover.NullableValue();//获取最简单的方法是添加一个文本框并将可见属性设置为false。在日期选择器的valuechanged事件中,使用与选择器控件相同的日期时间值填充文本框。如果空字符串将值设置为空,则检查文本框的值。我就是这样解决的。我不能有NULLS,所以我将1/1/198012am定义为MYNULLDATE。我在datetimepicker的文本和值上使用数据绑定。我没有在datetimepicker中使用复选框。我没有将格式从短格式替换为自定义格式。它似乎触发了valuechanged事件,所以我只是使用自定义并更改了自定义格式。我使用带有NONBOUND复选框的flowpanel坐在datetimepicker前面。代码示例privatevoiddateTimePicker_ValueChanged(objectsender,EventArgse){if(sender!=null&&sender.GetType()==typeof(DateTimePicker)){if(((DateTimePicker)(sender)).Value==MYNULLDATE){((DateTimePicker)(sender)).CustomFormat="";checkBoxDate.Checked=false;}else{((DateTimePicker)(sender)).CustomFormat="M/d/yyyy";checkBoxDate.Checked=true;在非绑定CheckBox中privatevoidcheckBoxDate_Click(objectsender,EventArgse){if(bindingSource!=null&&bindingSource.Current!=null&&bindingSource.Current.GetType()==typeof(MyRecord)){MyRecorda=(MyRecord)bindingSource.Current;如果(checkBoxDate.Checked==false){a.Date=MYNULLDATE;dateTimePicker.Enabled=false;}else{if(a.Date==null||a.Date==MYNULLDATE){dateTimePicker.Enabled=true;a.Date=DateTime.Now;}}bindingSource.ResetBindings(false);使用Vs2015并且没有运气绑定DateTimePicker控件。最简单的事情似乎是不绑定它——将对象的值传递给控件,??手动将控件传递给对象。几行代码就可以省去很多麻烦了...以上就是C#学习教程的全部内容:Howtosetthedatetimepickertoanullvalueifnodateisselected(c#winforms),如果有用给大家,需要了解更多C#学习教程的,希望大家多多关注~null){dtDatePicker.Checked=false;}else{dtDatePicker.Checked=true;dtDatePicker.Value=o.myDate.Value;}}privatevoidSave(){if(dtDatePicker.Checked){o.myDate=dtDatePicker.Value;}else{o.myDate=null;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: