在C#中的DateTimePicker中设置Null值

我正在用C#开发一个基于winform的桌面应用程序。 我希望用户将DateTimePicker设置为Null 。 我正在开发一个搜索框,如果设置为Null ,我想忽略日期

这是我在做的事情:

  this.dateTimePicker2.CustomFormat = " "; this.dateTimePicker2.Format = DateTimePickerFormat.Custom; private void dateTimePicker2_ValueChanged(object sender, EventArgs e) { this.dateTimePicker2.CustomFormat = "dd-MM-yy"; } 

到现在为止还挺好。 但是,一旦用户选择日期, dateTimePicker2控件就会显示一些日期(用户选择的日期)。 无法再将日期设置为null。 我并不热衷于启用与datetimepicker控件关联的复选框。

我想知道是否可以将datetimepicker日期设置为null

谢谢

这是旧post的引用,但本网站上的其他用户已将其发布到此处

 // Use ValueChanged to decide if the value should be displayed: dateTimePicker1.ValueChanged += (s, e) => { dateTimePicker1.CustomFormat = (dateTimePicker1.Checked && dateTimePicker1.Value != dateTimePicker1.MinDate) ? "MM/dd/yyyy" : " "; }; //When getting the value back out, use something like the following: DateTime? dt = (dateTimePicker1.Checked && dateTimePicker1.Value != dateTimePicker1.MinDate) ? (DateTime?) dateTimePicker1.Value : null; // or DateTime dt2 = (dateTimePicker1.Checked && dateTimePicker1.Value != dateTimePicker1.MinDate) ? dateTimePicker1.Value : DateTime.MinValue; 

或者您可以将CustomFormat设置为“”空白空间,如下所示

 dateTimePicker1.CustomFormat= " "; 

datetime选择器属性中添加checkbox

 string datevalue = dateTimePicker2.Checked != true ? "N/A": dateTimePicker2.Text;** 

我想知道是否可以将datetimepicker日期设置为null

没有办法将DateTimePicker.Value设置为null ,因为它的类型不可为空。 MSDN说:

如果未在代码或用户中更改Value属性,则将其设置为当前日期和时间(DateTime.Now)。

但这不是问题。 您应该将某些绑定属性设置为null,而不是DateTimePicker.Value

 public class MyModel : INotifyPropertyChanged { public DateTime? DateTimeFilter { get { return dateTimeFilter; } set { if (dateTimeFilter != value) { dateTimeFilter = value; OnPropertyChanged("DateTimeFilter"); } } } private DateTime? dateTimeFilter; // INotifyPropertyChanged implementation is omitted } public partial class Form1 : Form { private readonly MyModel model; public Form1() { InitializeComponent(); model = new MyModel(); dateTimePicker1.DataBindings.Add("Value", model, "DateTimeFilter", true, DataSourceUpdateMode.OnPropertyChanged, DateTime.Now); } private void button1_Click(object sender, EventArgs e) { MessageBox.Show(model.DateTimeFilter.HasValue ? string.Format("User has selected '{0}'.", model.DateTimeFilter) : "User hasn't selected anything."); } private void button2_Click(object sender, EventArgs e) { // here's the data binding magic: our model's property becomes null, // and datetimepicker's value becomes DateTime.Now, as it was initially set model.DateTimeFilter = null; } } 

我不认为这是可能的,因为DateTime不可为空。

但你可以使用DateTime.MinValue这样tou仍然可以轻松比较

 if (datetimepicker.DateTime == DateTime.MinValue) { // just as good as null, maybe } 

DateTime不是可空类型。

但你可以做到这一点:
只需在日期选择器上添加一个复选框,您就可以在属性上找到它并将ShowCheckBox设置为True
您可以使用此条件:

 if(datePicker.Checked){ //Do some stuff to ignore the Date Picker value } 

有关其他信息,我使用的是Microsoft Visual Studio 2010,我还没有检查其他IDE。
希望这有帮助。
干杯…

在SharePoint应用程序页面上使用DateTimeControl时,这对我有用。

 if (dtcOpenDate.SelectedDate != DateTime.Now) { item["Open Date"] = dtcOpenDate.SelectedDate; }