C# 对DataGridViewCell进行编程值更改后取消编辑不起作用
最小问题示例中的代码片段:C# 对DataGridViewCell进行编程值更改后取消编辑不起作用,c#,winforms,datagridview,cancellation,C#,Winforms,Datagridview,Cancellation,最小问题示例中的代码片段: private System.Windows.Forms.DataGridView dataGridView1; private System.Windows.Forms.DataGridViewTextBoxColumn colButtonEditedText; private System.Windows.Forms.DataGridViewButtonColumn ColBrowse; private System.Windows.Forms.DataGridV
private System.Windows.Forms.DataGridView dataGridView1;
private System.Windows.Forms.DataGridViewTextBoxColumn colButtonEditedText;
private System.Windows.Forms.DataGridViewButtonColumn ColBrowse;
private System.Windows.Forms.DataGridViewTextBoxColumn colOtherText;
this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.colButtonEditedText,
this.ColBrowse,
this.colOtherText});
this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellClick);
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex >= 0 && e.ColumnIndex >= 0
&& dataGridView1.Columns[e.ColumnIndex].GetType() == typeof(DataGridViewButtonColumn))
{
dataGridView1.NotifyCurrentCellDirty(true); // needed to make new row appear
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value
= "some value"; // button helps user edit row
}
}
观察到的行为:
注意:刚才添加的行已取消
观察:编辑第一列
观察:行仍处于编辑模式,不会被取消
观察:刚刚添加的行已取消,两次编辑都将消失
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Selected = true;
dataGridView1.BeginEdit(true);
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.LeaveControl);
dataGridView1.EndEdit();
您看到这种行为的原因与控件的焦点有关。单击
按钮
单元格将此焦点从DataGridView
中移除,从而防止取消编辑
按预期触发。在if语句中,尝试以下操作:
dataGridView1.NotifyCurrentCellDirty(true);
dataGridView1.CurrentCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex - 1];
dataGridView1.BeginEdit(false);
dataGridView1.EditingControl.Text = "some value";
这可能看起来有点不对劲,因为您正在将焦点从按钮
单元格更改为已编辑的单元格,但当您点击Esc时,您将看到所需的行为
旁注:我将处理DataGridView.CellContentClick
事件-仅当单击按钮本身而不是整个单元格时才会触发