2016-07-07 59 views
1

C#,WinForms,DataGridView,DataTable。我的表單允許用戶將數據輸入到新行中(而不是彈出記錄的單個記錄視圖)。當用戶點擊我的保存按鈕,單擊事件是這樣的:DataTable.GetChanges(DataRowState.Added)失敗,空值

DataTable dtAddRows = this.SomeFictitiouslyNamedDataSet.SomeFictitiouslyNamedDataTable.GetChanges(DataRowState.Added); 

我的假設是,與枚舉調用GetChanges是會得到我的一組被添加到電網在運行時,該行的。但是,由於其中一列「Last_Updated_DT」(必須顯示和只讀)是日期列,因此在寫入數據表時將填充日期列。但是,DataSet有一個規則,該列不能爲空。

問題是,我收到一個錯誤,指出Last_Updated_DT列實際上是空(驚喜)。它是一個新的行,列在網格中只讀,所以它當然是空的。

在我實際嘗試獲取添加的行之前,如何解決此錯誤或在該列的那些(或那些)行中填充一個值?

+0

該行是否編譯?或者你是否指定了DataSet ... DataSet?和你的DataTable ... DataTable? – LarsTech

+0

您可以將默認值設置爲該只讀列。您的新行將具有該值而不是null。 – Kinetic

+0

@KiNeTiC我可以設置DateTime.Now的默認值嗎?這似乎不適用於除gui以外的其他任何內容,並且在點擊事件中Im之後,它太晚了。 –

回答

1

爲子孫後代着想:

private void myGrid_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e) 
{ 
    e.Row.Cells["MyColumnNameGridViewTextBoxColumn1"].Value = String.Empty; 
} 

並稱事件我的代碼固定我的問題。我將該值設置爲String.Empty,因此在單擊「保存」後,它不會在該列中輸入日期/時間值。

然後,在Save_Click事件中,我得到了添加的行使用此代碼:

DataTable dtAddedRows = this.dsMyDataSet.MyDataTable.GetChanges(DataRowState.Added); 

然後,在TableAdapter.Insert參數列表,我加DateTime.Now date參數。

最後調用MyTableAdapter.Update方法使用DataSet過載。

全部固定。

提示給@KiNeTiC提供必要的指導。