在C#中的DateTimePicker中设置Null值
本文关键字:设置 Null DateTimePicker 中的 | 更新日期: 2023-09-27 17:57:59
我正在C#中开发一个基于winform
的Desktop应用程序。我希望用户将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
控件就会显示某个日期(用户已选择的日期)。没有办法再次将日期设置为空。我不想启用与datetimepicker
控件关联的复选框。
我想知道是否可以将datetimepicker
日期设置为null
。
感谢
这是一篇旧帖子的参考,但该网站上的其他用户已经在这里发布了它
// 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= " ";
将checkbox
添加到datetime
选择器属性:
string datevalue = dateTimePicker2.Checked != true ? "N/A": dateTimePicker2.Text;**
我认为这是不可能的,因为DateTime不可为null。
但是你可以这样使用DateTime.MinValue
,你仍然可以很容易地比较
if (datetimepicker.DateTime == DateTime.MinValue)
{
// just as good as null, maybe
}
我想知道是否可以将日期时间选择器日期设置为空
无法将DateTimePicker.Value
设置为null
,因为其类型不可为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的类型不可为null
但你可以这样做:
只需在日期选择器上添加一个复选框,就可以在属性中找到它,并将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;
}
此实现将原始Value属性替换为可为null的DateTime,该DateTime处理setter中的CheckBox状态。默认日期可以灵活设置,在我的情况下,年初日期更容易使用最小值或今天。设置自定义格式"当我觉得null没有改善用户体验,但可以随意更改时,我选择保持简单。
public class DateTimePickerAdvanced : DateTimePicker
{
public DateTime DefaultDate { get; set; }
public DateTimePickerAdvanced()
{
DefaultDate = new DateTime(2020, 01, 01);
}
public new DateTime? Value
{
get
{
return this.ShowCheckBox && !this.Checked ? null : (DateTime?)base.Value;
}
set
{
if (value == null && !this.ShowCheckBox)
{
throw new Exception("ShowCheckBox must be enabled in order to set DateTimePicker to null");
}
base.Value = value == null ? DefaultDate : (DateTime)value;
if (this.ShowCheckBox)
{
if (value == null && this.Checked)
{
this.Checked = false;
}
else if (value != null && !this.Checked)
{
this.Checked = true;
}
}
}
}
}