如何暂停更新有界DataGridView中当前编辑的单元格?

时间:2011-06-29 14:19:52

标签: c# .net winforms data-binding datagridview

我有一个绑定到集合的DataGridView,它经常被更改(不是集合本身,而是对象的属性)。当我开始编辑单元格时,它会快速替换来自PropertyChanged事件的新值。无论如何“暂停”当前正在编辑单元格进行更新。

2 个答案:

答案 0 :(得分:2)

您应该可以通过添加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;
}

我使用后台工作程序对其进行了测试,其中一个睡眠由一个按钮启动,并在此之后更新绑定列表。我按下按钮然后编辑了一个单元格,在计时器到期后,我对单元格的更改仍然保持。

当我没有开始编辑时,单元格的更改已更改。


需要注意的一点是,这是针对整个绑定源,而不是特定的单元格。

答案 1 :(得分:1)

如果你总是希望只有当你离开字段时(或者从代码中更新字段时)才更新绑定属性,那么我认为你应该使用DataBindingMode.OnValidated而不是DataBindingMode.OnPropertyChanged你创建你的绑定。