6

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

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

这是我的代码的一个变体。我尝试过其他事件,但它非常幼稚

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];
    }
}
4

2 回答 2

8

我认为您必须CellValidating根据DataGridView.

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

private void dataGridView1_CellValidating(object sender,
    DataGridViewCellValidatingEventArgs e)
{

    if (!IsValueValid(e.FormattedValue))
    {
        e.Cancel = true;

        MessageBox.Show("Not Valid!");
    }
}

网上有很多例子,可以直接在 MSDN 的文档DataGridViewCellValidatingEventArgs找到还可以查看属性DataGridViewCellValidatingEventArgs.FormattedValue的文档

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

于 2012-07-02T19:52:08.873 回答
0

不能为某些单元格或行禁用 DataGrids CellEnter CellLeave 事件。

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

于 2012-07-02T17:28:12.983 回答