4

我正在winform用 C# 开发一个基于桌面的应用程序。我希望用户将 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.

谢谢

4

7 回答 7

5

这是来自旧帖子的参考,但该站点上的其他用户已在此处发布

// 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= " ";
于 2013-02-06T07:03:02.813 回答
4

添加checkbox到您的datetime选择器属性:

string datevalue = dateTimePicker2.Checked != true ? "N/A": dateTimePicker2.Text;**
于 2014-12-02T19:07:16.383 回答
1

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

无法设置DateTimePicker.Valuenull,因为它的类型不可为空。MSDN 说:

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

但这不是问题。您应该将某些绑定属性设置为空,而不是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;
    }
}
于 2013-02-06T08:09:21.417 回答
1

我认为它不可能,因为 DateTime 不可为空。

但是您可以使用DateTime.MinValue这种方式,您仍然可以轻松比较

if (datetimepicker.DateTime == DateTime.MinValue)
{
  // just as good as null, maybe
}
于 2013-02-06T07:02:44.897 回答
0

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

if (dtcOpenDate.SelectedDate != DateTime.Now)
{
    item["Open Date"] = dtcOpenDate.SelectedDate;    
}
于 2014-10-19T23:20:31.460 回答
0

DateTime 不是可为空的类型。

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

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

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

于 2013-06-13T02:40:12.957 回答
0

此实现将原始 Value 属性替换为可空的 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;
                }
            }
        }
    }
}
于 2021-02-04T23:22:36.560 回答