zoukankan      html  css  js  c++  java
  • 让DateTimePicker显示空时间值

    写在前面:在.net中让DateTimePicker显示一个空的时间值,也许是很容易的事情,但事实上,也不是很容易的,至少,没有经过努力的修改和重画,你是达不到的。在修改这个控件的时候,你又常常发现会有bug。下面介绍一个方法,至少源作者是经过研究的,没有发现多少问题。

    源网址
    http://www.codeproject.com/KB/selection/Nullable_DateTimePicker.aspx
    你可以在上述的网址找到源代码和英文的说明。

    效果图
    下图中,你只要按一下Delete键就可以将DateTimePicker的值设置为空,实际的值是DateTime.MinValue,这一个简单的效果,也许是很多程序员想看到。不过学习一下这个控件。

    源代码
    最重要的两个重载方法是下面俩。
    protected override void OnCloseUp(EventArgs eventargs)
    protected override void OnKeyDown(KeyEventArgs e)
    DateTimePicker本身是支持自定义格式的,DateTimePickerFormat.Custom,就是声明使用自定义格式的。
      public new DateTime Value
      {
       get
       {
        if (bIsNull)
         return DateTime.MinValue;
        else
         return base.Value;
       }
       set
       {
        if (value == DateTime.MinValue)
        {
         if (bIsNull == false)
         {
          oldFormat = this.Format;
          oldCustomFormat = this.CustomFormat;
          bIsNull = true;
         }

         this.Format = DateTimePickerFormat.Custom;
         this.CustomFormat = " ";
        }
        else
        {
         if (bIsNull)
         {
          this.Format = oldFormat;
          this.CustomFormat = oldCustomFormat;
          bIsNull = false;
         }
         base.Value = value;
        }
       }
      }

    出处:小作坊网ChakMan

    C#日期控件datetimepicker保存空值方法

    2009-06-01 15:37

    方法一(推荐):

    设置datetimepicker的属性ShowCheckBox为true

    在窗口初始化时候,添加代码this.datetimepicker1.Checked = false;

    保存日期值入库的时候,就可以根据if(this.datetimepicker1.Checked ==false),保存空值。

    方法二:

    在窗口初始化函数中添加:
    this.dateTimePicker1.Format=DateTimePickerFormat.Custom;
    this.dateTimePicker1.CustomFormat="   ";
    在日期改变事件里写:
    private void dateTimePicker1_ValueChanged(object sender, System.EventArgs e)
    {
    this.dateTimePicker1.Format=DateTimePickerFormat.Long;
    this.dateTimePicker1.CustomFormat=null;
    }
    这样就实现了,在程序初始化时dateTimePicker显示为空

    但是,这种写法有个问题,保存入库的时候,还要加一个判断if(this.dateTimePicker1.Text.toString()==""),保存空值;else 保存this.dateTimePicker1.value。

    这种写法遇到个bug,一直没有解决,就是日期控件默认是空的,在第一次选择一个日期后必须失去焦点才能选择新的日期,不知道什么原因?

    方法三:

    在日期控件上面覆盖一个文本框,然后初始化时候文本框是空值,每次日期选择之后将值附在文本框里面。

    http://hi.baidu.com/pollywog/blog/item/8ec254cecfd33731b600c856.html

  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/emanlee/p/1531308.html
Copyright © 2011-2022 走看看