上記のように、
これを無効にする(またはプログラムで回避する)にはどうすればよいですか?
疑似コードは次のようになります。
cellvaluechangedevent/rowaddedevent(sender,e){
If(initial load of datagrid){
//trap this, end of method
}
else{
//do work
}
}
上記のように、
これを無効にする(またはプログラムで回避する)にはどうすればよいですか?
疑似コードは次のようになります。
cellvaluechangedevent/rowaddedevent(sender,e){
If(initial load of datagrid){
//trap this, end of method
}
else{
//do work
}
}
私は、データの読み込みを独自の方法に分ける傾向があります。そのため、ロードまたはリフレッシュ中に起動される可能性のあるハンドラーをデタッチし、そのプロセスが終了したら単純に再アタッチすることができます。これにより、(該当する場合) コード内の他の場所から dgv データを更新することも容易になります。
問題のコンテキストにおける重要な点は次のとおりです。
DataGridView
、データソースに入力または添付してください。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
}
最初に発火したときにバイパスしたいだけのようです。namedを
想定し、元の handler を割り当てた場合、次のことができます。DataGridView
dataGridView1
dataGridView1_CellValueChanged
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
dataGridView1.CellValueChanged-=dataGridView1_CellValueChanged;
dataGridView1.CellValueChanged+=
(sender_, e_) => {
MessageBox.Show("fired after first time");
};
}
DataGridView.IsCurrentCellDirty
または使用できますIsCurrentRowDirty
cellvaluechangedevent/rowaddedevent(sender,e){
if (dataGridView1.IsCurrentCellDirty) {
If(initial load of datagrid){
//trap this, end of method
}
else{
//do work
}
}
}