DateTimePicker打破数据绑定

时间:2014-01-24 11:19:17

标签: c# winforms

我有一个带有两个数据绑定文本框的表单,一个数据绑定的DateTimePicker和一个BindingNavigator。我在运行时将这些组件绑定到相关的数据源(文本框的“文本”和“值”,并且DateTimePicker分别绑定到数据集中的相关字段)。所有组件都正确显示当前记录。通常,当单击导航器上的“添加新项”按钮时,所有文本框都将清除以准备新条目。但是,我遇到的问题是,绑定DateTimePicker时不会发生这种情况,此外,任何更新数据集的尝试都不会正确发生。如果我忽略绑定DateTimePicker,那么所有工作都按预期工作。造成这种行为的原因是什么?有什么方法吗?

2 个答案:

答案 0 :(得分:2)

DateTimePicker不支持绑定到可空数据。添加新行时,该字段的值默认为DBNull.Value,并且无法成功转换为可分配给DateTimePicker的Value属性的值,该类型为DateTime。您需要扩展DateTimePicker并添加一个支持DateTime值和DBNull对象的新属性并绑定它,或者设置DataColumn的DefaultValue属性,以便始终在DateTimePicker中显示DateTime。

答案 1 :(得分:0)

通过简单地根据此站点控制绑定源的addrow方法,我的方案解决了此问题:http://www.vbforums.com/showthread.php?645401-RESOLVED-datetimepicker-with-binding-source

在绑定导航器上添加一个新按钮(用作“添加”)并删除旧按钮。

连接到click事件并设置要添加的新行的日期时间:

DataRowView row = (DataRowView)bs_.AddNew();
row["dbDateTime"] = DateTime.Now;

其中dbDateTime是您的数据库字段。

虽然您可能需要向click事件添加更多代码,例如移动到datagrid上新添加的行,但此选项是最容易实现的。