2013-04-29 109 views
2

在Winform应用程序上,我有一个datagridview,允许用户查看数据库中的几个日期。它显示日期在选定范围内的行,然后用户可以更改任何行上的日期,并点击更新按钮将这些更改保存到数据库。然后窗体刷新datagridview,删除不在选定日期范围内的任何行。未保存datagridview值

当数据网格首次被填充或刷新时,我从数据库中提取数据并添加一个默认为False的Changed列。这成为Datagridview的数据源。

dadapt.Fill(lDT_transReview); 
lDT_transReview.Columns.Add("Changed",typeof(Boolean), "false"); 
dgTransReview.DataSource = lDT_transReview; 

要检查日期竟是变化(没有刚刚进入同一天),我原来的日期在临时变量存储在开始编辑的事件。然后在编辑事件结束时,我比较日期并将“已更改”布尔值复选框设置为true。

dgTransReview["Changed", e.RowIndex].Value = "True"; 

然后在保存行的代码中,我使用了一个foreach循环来查看'changed'列是否为true。

foreach (DataGridViewRow row in dgTransReview.Rows) 
     { 
      if (row.Cells["Changed"].Value.ToString() == "True") 
      { 
       //Code to save individual row with changes to database 
      } 
     } 
TrandRefresh(); 

我得到的问题是更改的单元格似乎没有保持该值。当它将值设置为True时,单元在更新之前为空(但为True后),并且当我到达foreach循环时,由于单元格再次为空,我得到一个对象未​​设置错误。

回答

1

不要介意我想通了。问题是Datagrid中的更改列未将数据属性设置为表中的更改列。 (我还必须改变我添加Changed列到数据表的方式,因为上面所示的方法使字段只读。)