【问题标题】:Check if New Rows Added to DataGridView and if so, Get the Collection of New Rows检查是否向 DataGridView 添加了新行,如果是,则获取新行的集合
【发布时间】:2014-11-20 21:34:26
【问题描述】:

在 VB.NET WinForms 项目中,我有一个由数据集填充的 datagridview。当用户单击按钮时,我需要检查 DGV 中是否有任何新行,如果有,则获取要插入数据库的行集合。 (我将 DGV 属性 AllowUserToAddRows 设置为 True,因此 DGV 底部有一行。)

我最接近于任何进展的是以下内容,这给了我好坏参半的结果。代码确实会从新行中获取值 - 但前提是用户点击了新行。如果焦点没有离开新行,就好像该行没有被添加到新行的幕后集合中。 (点击退出然后返回新行有效)。

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

CaseyWilkins 帮助我解决了类似的问题 here。在这种情况下,将焦点留在已更改的 单元格 中需要添加以下代码:

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

我试过了

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

但这并没有做到。

我不能很好地包含说明“您必须单击新行才能工作”! :)

【问题讨论】:

    标签: vb.net winforms datagridview datagridviewrow


    【解决方案1】:

    试试这个:

    dgvEmployees.CurrentCell = Nothing

    这将强制 dgv 验证新的或编辑的行。在更新命令之前执行此操作。它应该可以工作。

    【讨论】:

      【解决方案2】:

      新行可能仍处于编辑模式,请尝试:

      dgvEmployees.EndEdit();
      

      【讨论】:

      • 差不多了 - 我花了更多时间研究,但我找到了 - 请参阅我的答案。
      【解决方案3】:

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

      EmployeesBindingSource.EndEdit()
      

      就在保存按钮的单击事件的开头。

      我在this page找到了答案。

      【讨论】:

        猜你喜欢
        • 2014-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-23
        • 2017-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多