2014-11-20 43 views
0

在VB.NET WinForms項目中,我有一個由數據集填充的datagridview。當用戶點擊一個按鈕時,我需要檢查DGV中是否有新行,如果是,請獲取要插入數據庫的行集合。 (我將DGU屬性AllowUserToAddRows設置爲True,因此DGV底部有一行。)檢查是否新行添加到DataGridView,如果是,獲取新行的集合

最接近我可以進展的是以下內容,這給了我不同的結果。該代碼確實從新行中獲取了值 - ,但前提是用戶已經點擊了新行。如果焦點沒有離開新行,就好像該行沒有被添加到新行的後臺集合構建中。 (點擊,然後回到新行工作)。

If EmployeesDataSet.HasChanges(DataRowState.Modified Or DataRowState.Added) Then 
    Dim changesDataSet As DataSet = EmployeesDataSet.GetChanges(DataRowState.Modified Or DataRowState.Added) 
    Dim changesTable As DataTable 

    For Each changesTable In changesDataSet.Tables 
     Console.WriteLine("TableName: " & changesTable.TableName) 
     For Each row As DataRow In changesTable.Rows 
      Dim column As DataColumn 
      For Each column In changesTable.Columns 
       Console.Write("Value: " & row(column).ToString() & ControlChars.Tab & ", ") 
      Next column 
      Console.WriteLine() 
     Next 
    Next 

End If 

凱西威爾金斯幫我解決了類似問題here。在這種情況下,剩下的重點在改變細胞需要添加以下代碼:

If dgvEmployees.IsCurrentCellDirty Then 
    dgvEmployees.CommitEdit(DataGridViewDataErrorContexts.Commit) 
End If 

在光我試圖

If dgvEmployees.IsCurrentRowDirty Then 
    dgvEmployees.CommitEdit(DataGridViewDataErrorContexts.Commit) 
End If 

,但沒有做到這一點。

我不能很好地包含說明「你必須點擊新行才能工作」! :)

回答

0

LarsTech接近。 EndEdit()方法需要在DataGridView的BindingSource上調用。所以我的解決方案是

EmployeesBindingSource.EndEdit() 

在保存按鈕的點擊事件的開始。

我在this page找到答案。

0

的新行很可能還是在編輯模式下,所以嘗試:

dgvEmployees.EndEdit(); 
+0

這很接近 - 它花了我多一點研究,但我找到了 - 看到我的答案。 – marky 2014-11-21 16:48:49

1

試試這個:

dgvEmployees.CurrentCell = Nothing

這將迫使DGV驗證新的或編輯一行。在更新命令之前執行此操作。它應該工作。

相關問題