【发布时间】:2015-07-31 07:06:48
【问题描述】:
首先,我的问题是实验性问题,而不是实际问题。我的数据库表有一列datetime,它允许空值。该列只有 1 条记录具有空值。现在使用数据适配器(非常基本)将数据填充到DataTable 并将其显示在DataGridView 上。我可以看到日期时间为空值的单元格是空的(DataTable 中包含的基础数据是DBNull)。我有一个 DateTimePicker 绑定到 datetime 字段(可以有 DBNull 值)。现在,如果我将 DataGridView 上的选择导航到我提到的日期时间列中具有空值的行,则 DateTimePicker(连同其他一些文本字段)不会更新该值(看起来它停留在之前的选择中)。我还尝试创建一个Binding,它将DBNull 格式化为DateTime.MinValue,但没有任何变化。代码如下:
var dt = new DataTable();
myAdapter.Fill(dt);
dataGridView.DataSource = dt;
//bind controls
var binding = new Binding("Value", dataGridView.DataSource, "birthdate");
//here is what I tried to convert DBNull.Value to DateTime.MinValue
binding.Format += (s,e) => {
//debug shows that the execution can jump in here
if(e.Value == DBNull.Value){
e.Value = DateTime.MinValue;
}
};
myDatePicker.DataBindings.Add(binding);
数据库表很简单,有一些列。我认为问题可能在于 DateTimePicker 如何处理数据。如果没有将数据绑定到它,控件会显示与 DataGridView 上的当前选择相对应的信息 OK。这是我在使用 Binding 时最讨厌的事情。这非常方便,但有时只是不可能理解和调试。如果使用事件处理程序(SelectionChanged 事件)跟踪选择并手动更新控件,则此问题永远不会如此耗时。
我希望有人遇到过这个问题,可以给我一些建议。谢谢。
【问题讨论】:
标签: c# winforms data-binding datagridview ado.net