在Winform App上,我有一个datagridview,它允许用户查看数据库中的几个日期。它显示日期处于选定范围内的行,然后用户可以更改任何行上的日期,然后单击更新按钮以将这些更改保存到数据库。然后,该窗体刷新datagridview,删除不再位于所选日期范围内的任何行。
首次填充或刷新datagrid时,我从数据库中提取数据,并添加一个默认为False的Changed列。这将成为Datagridview的数据源。
dadapt.Fill(lDT_transReview);
lDT_transReview.Columns.Add("Changed",typeof(Boolean), "false");
dgTransReview.DataSource = lDT_transReview;
为了检查日期是否实际更改(不仅仅是输入相同的日期),我将原始日期存储在begin edit事件的temp变量中。然后在结束Edit事件中,我比较日期并将“更改的”布尔复选框设置为true。
dgTransReview["Changed", e.RowIndex].Value = "True";
然后在保存行的代码上,我使用一个foreach循环来查看“ changed”列是否为真。
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,因此我得到一个对象未设置错误。
最佳答案
没关系,我想通了。问题是,Datagrid中的Changed列没有将数据属性设置为表中的Changed列。 (我还必须更改将“已更改”列添加到数据表的方式,因为上面显示的方法使该字段为只读。)