2

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

我有一个绑定到 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)

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

4

1 回答 1

0

我认为问题在于您将数据表绑定到数据 GridView 的方式。

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

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

这些更改应该反映在 Datagrid 视图中,因为它们都由 Binding 源绑定。

于 2012-04-16T12:58:03.467 回答