如何暂时禁用事件
本文关键字:事件 何暂时 | 更新日期: 2023-09-27 18:35:24
我有具有单元格验证事件的datagridview,因此用户必须在离开该单元格之前填充列[0]上的单元格
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (string.IsNullOrWhiteSpace(dataGridView1.CurrentRow.Cells[0].FormattedValue.ToString()))
{
MessageBox.Show("Please fill this field");
e.Cancel = true;
}
}
我想删除带有按钮的行,即使该行上的所有单元格都为空,但每次单击DeleteRow_btn验证消息时都会显示
private void DeleteRow_btn_Click(object sender, EventArgs e)
{
dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
if (dataGridView1.Rows.Count < 1)
{
dataGridView1.Rows.Add();
}
}
我已经尝试过了
private void DeleteRow_btn_Click(object sender, EventArgs e)
{
dataGridView1.CellValidating -= dataGridView1_CellValidating;
dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
if (dataGridView1.Rows.Count < 1)
{
dataGridView1.Rows.Add();
}
dataGridView1.CellValidating += dataGridView1_CellValidating;
}
但它行不通,我知道为什么,但我不知道如何解决这个问题谢谢你的时间,无论如何对不起我的英语
这是因为当您
离开单元格以单击删除按钮时,但在单击发生之前,该单元格正在进行验证。因此,在 click 事件处理程序中分离事件将不起作用。
解决方案是仅在行不为空时才显示验证消息。 即,如果所有单元格都为空,则不应显示验证消息。
bool isRowEmpty = dataGridView1.CurrentRow.Cells
.Cast<Cell>()
.All(cell => IsNullOrWhiteSpace(cell.FormattedValue.ToString()));
if (isRowEmpty) {
// validate
}