用户更改单元格值时要捕获的DataGridView事件

PJW*_*PJW 22 c# datagridview winforms

我有一个用C#编写的Winforms应用程序.

在我的一个DataGridViews中,我将所有列设置为除了一个名为'Reference'的ReadOnly = true;

我希望应用程序知道用户何时更改了"参考"列中的任何内容,但到目前为止我尝试过的所有事件比用户进行更改时要多得多.例如,CurrentCellChanged在最初呈现DataGridView时触发,并且每次用户只需单击行或沿行标记等时触发.

我只对在'Reference'列中捕获用户对数据的更改感兴趣,该列是ReadOnly = false的唯一列;

哪个是最好的事件?

Kin*_*ing 30

CellValueChanged 是你需要的:

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e){
  if(dataGridView1.Columns[e.ColumnIndex].Name == "Reference"){
    //your code goes here
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为该活动CellEndEdit也适合您的需求:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e){
  if(dataGridView1.Columns[e.ColumnIndex].Name == "Reference"){
    //your code goes here
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我投票给你的第二个解决方案:`private void dataGridView1_CellEndEdit(object sender,DataGridViewCellEventArgs e){if(dataGridView1.Columns [e.ColumnIndex] .Name =="Reference"){// your code goes here}}`因为第一个即使操作未被用户触发,每次单元格中的值都会更改时触发.IE如果我有一个在后台添加行的方法,CellValueChanged将会触发. (8认同)
  • 第二个解决方案(CellEndEdit事件)也会在值未更改时触发 - 例如,即使用户按下"esc"结束编辑而不更改值也是如此. (2认同)