将DateTimePicker值设置为null

Man*_*ali 10 c# datetimepicker winforms

我正在开发一个带有两个DateTimePicker控件的WinForms UI .最初,我想将控件的值设置为null,直到用户选择日期.如果用户未选择日期,则会将值传递给数据库.

默认情况下,它采用当前日期.

你能不能提出建议或附上一段能帮我解决问题的代码.

我试过设置MinDate属性,但它不起作用.

代码在C#.Net中.

谢谢,Manali.

Zyo*_*Zyo 14

我认为最好的解决方案是使用内置复选框,告诉用户是否指定了值.

设置控件属性 ShowCheckBox = true

当你将值绑定到它时,执行类似的操作

 if (value == DateTime.MinValue) {
    datePicker.Checked = false;
  } else {
    datePicker.Checked = true;
    datePicker.Value = value;
  }
Run Code Online (Sandbox Code Playgroud)

回读值时检查Checked属性.

如果您在取消选中时不喜欢显示的值,则可以将其与其他建议结合使用.

  if (!datePicker.Checked) {
    // hide date value since it's not set
    datePicker.CustomFormat = " ";
    datePicker.Format = DateTimePickerFormat.Custom;
  } else {
    datePicker.CustomFormat = null;
    datePicker.Format = DateTimePickerFormat.Long; // set the date format you want.
  }
Run Code Online (Sandbox Code Playgroud)


K K*_*ble 8

我知道这是一篇较老的帖子,但其他人可能仍然觉得这很有用.它相当优雅和简洁.我在.Net 4.0 DateTimePicker中使用它,但早期版本应该使用最小的调整.它利用MinDate和Checked.

    // 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; 
Run Code Online (Sandbox Code Playgroud)


JTo*_*lla 1

可能您需要创建一个具有文本框外观的用户控件,当用户单击日历显示时,当您选择日期时将其设置为文本框。它将允许空值。

DateTimePicker 不允许为 null。