2014-11-20 54 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验证新的或编辑一行。在更新命令之前执行此操作。它应该工作。

相关问题