在 Winform 应用程序上,我有一个 datagridview 允许用户查看数据库中的几个日期。它显示日期在选定范围内的行,然后用户可以更改任何行的日期并点击更新按钮将这些更改保存到数据库中。然后表单刷新 datagridview 删除不再在所选日期范围内的任何行。
首次填充或刷新数据网格时,我从数据库中提取数据并添加默认为 False 的 Changed 列。这将成为 Datagridview 的数据源。
dadapt.Fill(lDT_transReview);
lDT_transReview.Columns.Add("Changed",typeof(Boolean), "false");
dgTransReview.DataSource = lDT_transReview;
为了检查日期是否实际更改(不仅仅是输入相同的日期),我将原始日期存储在开始编辑事件的临时变量中。然后在结束编辑事件上,我比较日期并将“已更改”布尔复选框设置为真。
dgTransReview["Changed", e.RowIndex].Value = "True";
然后在保存行的代码上,我使用 foreach 循环来查看“已更改”列是否为真。
foreach (DataGridViewRow row in dgTransReview.Rows)
{
if (row.Cells["Changed"].Value.ToString() == "True")
{
//Code to save individual row with changes to database
}
}
TrandRefresh();
我遇到的问题是 Changed 单元格似乎没有保持该值。当将值设置为 True 时,单元格在更新之前为 Null(但之后为 True),当我进入 foreach 循环时,我得到一个对象未设置错误,因为单元格再次为 null。