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

最初に発火したときにバイパスしたいだけのようです。namedを
想定し、元の handler を割り当てた場合、次のことができます。DataGridViewdataGridView1dataGridView1_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.IsCurrentCellDirtyまたは使用できますIsCurrentRowDirty

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 に答える