如何在C#中取消CellEnter / CellLeave事件?

时间:2012-07-02 16:05:12

标签: c# events datagridview

我有DataGridView。在某些单元格中,我添加了一些数据如果我正在编辑的单元格是空的并且我即将离开它,则会向用户显示消息“bla-bla-bla”,并且处于编辑模式的单元格必须重新获得焦点。

为此,我正在使用CellEnterCellLeaveCellEndEdit等。我想在检查单元格中输入的值后取消这些事件。但我不是,它不起作用。请帮我。很高兴看到任何建议。

以下是我的代码的变体。我尝试过其他活动,但它非常天真

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    if (dataGridView1[e.ColumnIndex, e.RowIndex] == null)
    {
        MessageBox.Show("Empty cell!");

        dataGridView1.CurrentCell = dataGridView1[e.ColumnIndex, e.RowIndex];
    }
}

2 个答案:

答案 0 :(得分:6)

我认为您必须根据CellValidating的{​​{1}}事件寻找解决方案。

DataGridView即将离开编辑模式并且允许您不接受用户输入的值时,它会被触发。要拒绝输入的值,请在事件处理程序的代码中将DataGridView设置为e.Cancel

True

网络上有很多示例,可以直接在MSDNprivate void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (!IsValueValid(e.FormattedValue)) { e.Cancel = true; MessageBox.Show("Not Valid!"); } } 文档中找到。 另请查看属性DataGridViewCellValidatingEventArgs.FormattedValue

的文档

请注意,方法DataGridViewCellValidatingEventArgs不是IsValueValid(Object o)组件的一部分,只是一个命名示例,您应该在代码中声明它并提供验证主体。

答案 1 :(得分:0)

您可以为某些单元格或行禁用DataGrids CellEnter CellLeave事件。

您可以做的是存储列表<>空单元格/不应调用进入/离开事件的单元格,以及在CellEnter / CellLeave中执行操作之前检查单元格是否在禁用单元格列表中。