【问题标题】:Complete Adding Row in DataGridView在 DataGridView 中完成添加行
【发布时间】:2025-12-30 22:35:12
【问题描述】:

我确信对此有一个简单的答案,但我一生都看不到它:

我有一个绑定到 DataTable 的 DataGridView。其中一个单元格可以包含相当长的字符串,所以我创建了一个编辑器对话框窗口(它也进行一些验证等),它在 DataGridView 的 CellDoubleClick 上打开。当用户在编辑器对话框中单击“确定”时,值将被放入单元格中。

只要它是已添加到 DataGridView 的单元格,它就可以正常工作,但是如果我在“添加新行”(其中 DataGridViewRow.IsNewRow 为真)上执行此操作,那么当对话框关闭时,我有除非行处于编辑模式并且随后无法添加新行,否则不会显示已编辑字符串的双重问题。

我可以看到的一个潜在解决方案是确保在打开对话框窗口之前将新行添加到基础源中,但我看不到这样做的优雅方法(DataGridView.EndEdit() 没有这样做)。那么有没有一种巧妙的方法来做到这一点(或者是否有更好的解决方案)?

代码如下:

void DataGridViewCellCoubleClick(object sender, DataGridViewCellEventArgs e){
    DataGridView gridview = (DataGridView)sender;
    gridview.EndEdit();
    EditForm editForm = new EditForm(gridview.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());

    if(editForm.ShowDialog() == DialogResult.OK){
        gridview.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = editForm.StringResult;
    }

}

编辑:

我找到了一个可以满足我要求的解决方案:

调用前:

DataGridView.EndEdit()

我还检查当前行是否为“IsNewRow”,如果是,我使用

DataGridView.NotifyCurrentCellDirty(true)

在我打开编辑窗口之前添加它。希望对某人有所帮助。

【问题讨论】:

  • Stardust,我认为你必须用代码展示你的问题,然后有人可以更好地帮助你。
  • 按您的要求添加了代码 sn-p。
  • 制定了解决方案(见问题帖子的结尾)

标签: c# winforms datagridview


【解决方案1】:

我认为问题在于您将数据表绑定到数据网格视图的方式。

我将创建一个绑定源并将其数据源设置为 DataTable。然后,我会将您的 Datagrid 视图的数据源设置为绑定源。

当您在数据网格视图中添加新行时,请在数据表中创建新行,然后刷新数据表。

这些更改应该反映在 Datagrid 视图中,因为它们都受 Binding 源的约束。

【讨论】:

    最近更新 更多