我使用ContexMenuStrip
在DataGridView
刪除一些行,但它不能正常工作。如何在選中單元格後停止DataGridView編輯?
每次檢查3行,選擇ContexMenuStrip
後,它只會刪除2行。當我做這個代碼沒有ContexMenuStrip
(通過Button
),正常工作。
當我看到行爲時,我明白當前行正在編輯但未完成。雙擊當前行停止編輯我的ContexMenuStrip
正常工作。
檢查CheckBox
後如何停止編輯?
我使用ContexMenuStrip
在DataGridView
刪除一些行,但它不能正常工作。如何在選中單元格後停止DataGridView編輯?
每次檢查3行,選擇ContexMenuStrip
後,它只會刪除2行。當我做這個代碼沒有ContexMenuStrip
(通過Button
),正常工作。
當我看到行爲時,我明白當前行正在編輯但未完成。雙擊當前行停止編輯我的ContexMenuStrip
正常工作。
檢查CheckBox
後如何停止編輯?
當一個單元格被選中並編輯後,DataGridView
屬性IsCurrentCellDirty
被設置爲True
。如果在DataGridViewCheckBoxCell
上發生此狀態更改時捕獲事件處理程序,則可以致電DataGridView.EndEdit()
立即完成這些更改。
this.dataGridView1.CurrentCellDirtyStateChanged += DataGridView1_CurrentCellDirtyStateChanged;
private void DataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (this.dataGridView1.IsCurrentCellDirty && this.dataGridView1.CurrentCell is DataGridViewCheckBoxCell)
{
this.dataGridView1.EndEdit();
}
}
進一步解釋:
在幕後,DataGridView.IsCurrentCellDirty
是每當編輯當前單元格更新。上面的第一行代碼允許您將自己的事件處理程序(DataGridView1_CurrentCellDirtyStateChanged
)附加到CurrentCellDirtyStateChanged
事件中。因此,每當細胞變髒時,幕後會調用基準級事件,然後調用您的方法。沒有這一行,你的方法將不會被調用。 +=
運營商是將附加到事件的調用鏈中。
例如,添加以下處理:
this.dataGridView1.CurrentCellDirtyStateChanged += DataGridView1_Example1;
// this.dataGridView1.CurrentCellDirtyStateChanged += DataGridView1_Example2;
this.dataGridView1.CurrentCellDirtyStateChanged += DataGridView1_Example3;
private void DataGridView1_Example1(object sender, EventArgs e)
{
Console.WriteLine("Example 1");
}
private void DataGridView1_Example2(object sender, EventArgs e)
{
Console.WriteLine("Example 2");
}
private void DataGridView1_Example3(object sender, EventArgs e)
{
Console.WriteLine("Example 3");
}
當髒狀態的變化,你會看到下面的輸出。通知第二個事件處理程序被排除在外:
// Example 1
// Example 3
我用你的代碼,它能夠正常工作。但我不明白需要{this.dataGridView1.CurrentCellDirtyStateChanged + = DataGridView1_CurrentCellDirtyStateChanged;} – saeid