我正在寻找像microsoft提供的那样的日期选择器,但是它不支持空值,因为它与数据库中可以为空的字段绑定是不可接受的。
我找到this one,但根据页面底部的评论,它存在绑定到数据库的问题。我在我的项目中也有一个我继承的,但它有类似的问题(有时它显示值,有时它不显示)。有谁知道有效的吗?
答案 0 :(得分:4)
使用日期选择器填充文本框,如果他们希望该字段为空,只需删除文本框的内容(然后相应地处理空白输入)。
这也提供了额外的好处,允许用户输入他们的日期,如果他们愿意的话。
答案 1 :(得分:1)
Smart FieldPackEditor有一个可以为空的日期选择器。我相信它可以满足您的一切需求。我希望这是在处理这类事情的时候。我仍然记得我必须使用Microsoft的datepicker控件实现的所有变通方法。 Uggh!
答案 2 :(得分:-2)
为什么不使用客户端datepicker来填充文本字段。如果textfield为空,则表示您具有空日期,否则转换该值。
jQuery有一个很好用的datepicker。 http://jqueryui.com
答案 3 :(得分:-3)
这个似乎有用,我的一个同事有这个:
using System;
using System.Windows.Forms;
namespace CustomControls
{
public class NullableBindableDateTimePicker : System.Windows.Forms.DateTimePicker
{
private Boolean isNull = false;
private DateTimePickerFormat baseFormat = DateTimePickerFormat.Short;
private Boolean ignoreBindOnFormat = false;
public NullableBindableDateTimePicker()
{
this.Format = baseFormat;
if (baseFormat == DateTimePickerFormat.Custom) this.CustomFormat = " ";
}
public Boolean IsNull
{
get { return isNull; }
set
{
isNull = value;
this.Checked = value;
}
}
//TODO: Add BaseCustomFormat
public DateTimePickerFormat BaseFormat
{
get { return baseFormat; }
set { baseFormat = value; }
}
public object BindMe
{
get
{
if (IsNull) return System.DBNull.Value;
else return base.Value;
}
set
{
//String s = this.Name;
if (ignoreBindOnFormat) return;
if (System.Convert.IsDBNull(value))
{
// for some reason setting base.format in this.format calls set BindMe.
// we need to ignore the following call
ignoreBindOnFormat = true;
this.Format = DateTimePickerFormat.Custom;
ignoreBindOnFormat = false;
this.CustomFormat = " ";
IsNull = true;
}
else
{
ignoreBindOnFormat = true;
this.Format = baseFormat;
ignoreBindOnFormat = false;
if (baseFormat == DateTimePickerFormat.Custom) this.CustomFormat = " ";
IsNull = false;
base.Value = (DateTime)value;
}
}
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Delete)
{
this.BindMe = DBNull.Value;
}
}
protected override void OnCloseUp(EventArgs eventargs)
{
base.OnCloseUp(eventargs);
BindMe = base.Value;
}
}
}