我确信这有一个简单的答案,但对于我的生活,我看不到它:
我有一个绑定到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)
在我打开编辑窗口之前添加它。希望有所帮助。
答案 0 :(得分:0)
我认为问题在于您将数据表绑定到Data GridView的方式。
我会创建一个绑定源并将其Datasource设置为DataTable。然后,我将Datagrid视图的数据源设置为绑定源。
在Datagrid视图中添加新行时,在数据表中创建一个新行,然后刷新Datatable。
这些更改应反映在Datagrid视图中,因为它们都受绑定源绑定。