1

正如刚才提到的,

如何禁用(或以编程方式解决某些问题)这个?

一些伪代码可能是:

cellvaluechangedevent/rowaddedevent(sender,e){
     If(initial load of datagrid){
          //trap this, end of method
     }
     else{
          //do work
     }
}
4

3 回答 3

2

我倾向于将我的数据加载分离到它自己的方法中。因此,我可以分离可能在加载或刷新期间触发的处理程序,然后在该过程完成时简单地重新附加。这也使得从代码中的其他位置刷新 dgv 数据变得更容易(如果适用)。

就您的问题而言,关键是:

  1. 分离处理程序
  2. 填充DataGridView或附加数据源,但是您正在这样做。
  3. 重新附加处理程序
private void LoadDataGrid()
{
    this.dataGridView1.CellValueChanged -= new 
        DataGridViewCellEventHandler(dataGridView1_CellValueChanged);

    // Your code to load data here

    this.dataGridView1.CellValueChanged +=new 
        DataGridViewCellEventHandler(dataGridView1_CellValueChanged);
}

void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    // Your code to handle the cell value changing
}
于 2013-01-05T12:56:31.100 回答
1

似乎您只想绕过它第一次触发。
假设您的DataGridViewnameddataGridView1并分配了原始处理程序dataGridView1_CellValueChanged,那么您可以执行以下操作:

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
    dataGridView1.CellValueChanged-=dataGridView1_CellValueChanged;

    dataGridView1.CellValueChanged+=
        (sender_, e_) => {
            MessageBox.Show("fired after first time");
        };
}
于 2013-01-05T12:07:03.480 回答
0

您可以使用DataGridView.IsCurrentCellDirtyIsCurrentRowDirty

cellvaluechangedevent/rowaddedevent(sender,e){
 if (dataGridView1.IsCurrentCellDirty) {
     If(initial load of datagrid){ 
          //trap this, end of method 
     }
     else{
          //do work
     }
   }
 }
于 2013-01-05T13:06:45.880 回答