如何挂起更新有界DataGridView中当前正在编辑的单元格

本文关键字:单元格 编辑 DataGridView 何挂起 挂起 更新 | 更新日期: 2023-09-27 18:00:37

我有一个绑定到集合的DataGridView,它经常更改(不是集合本身,而是对象的属性)。当我开始编辑一个单元格时,它会很快替换为来自PropertyChanged事件的新值。是否存在"挂起"当前正在编辑的单元格的更新。

如何挂起更新有界DataGridView中当前正在编辑的单元格

您应该能够通过添加BindingSource来实现您想要的。

bindingSource1.DataSource = yourdatasource;
dataGridView1.DataSource = bindingSource1; 

在datagridview的CellBeginEdit和CellEndEdit事件中,您可以更改绑定源的RaiseListChangedEvents属性:

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    bindingSource1.RaiseListChangedEvents = true;
}
void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
    bindingSource1.RaiseListChangedEvents = false;
}

我用一个后台工作人员测试了这一点,里面有一个由按钮启动的睡眠,然后更新绑定列表。我按下按钮,然后编辑一个单元格,在计时器到期后,我对该单元格的更改仍然保持不变。

当我没有开始编辑单元格时,对列表的更改被更改了。


需要注意的一点是,这是针对整个结合源,而不是特定的细胞。

如果您总是希望绑定属性仅在离开字段时(或从代码中更新字段时)更新,那么我认为您应该使用DataBindingMode.OnValidated而不是DataBindingMode.OnPropertyChanged。