2013-04-29 73 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列到數據表的方式,因爲上面所示的方法使字段只讀。)