当数据输入DataGridView的单元格时,我可以在单元格验证之前修改它们的条目吗?

时间:2011-05-13 02:16:41

标签: c# validation datagridview

考虑一个数据输入表单,用户需要以军事格式输入时间。他们希望通过键盘键来加速他们的工作,但不想在小时/分钟之间键入冒号(:)。

列格式化为允许时间,并自动将时间转换为标准AM / PM格式。不幸的是,它需要结肠。因此,应在此输入上运行转换方法以尝试将其转换为时间值。

执行此操作的方法不是我正在寻找的答案的一部分。它可以表示为什么有人想要将用户键入的值更改为其他值的任何原因。关键是它需要在验证之前发生,因此不会引发DataError事件。

我认为CellValidating将是正确的地方所以我写了我期望的工作:


private void sampleDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    // Ensure we're looking at the column that requires our attention
    if (sampleDataGridView.Columns[e.ColumnIndex].Name == "timeCol")
        sampleDataGridView[e.ColumnIndex, e.RowIndex].Value = convertMilitary(e.FormattedValue);

}

在写入单元格后进入此代码时,事件args告诉我格式化的值确实是键入的,但尝试将其设置为单元格的当前值无助于验证。仔细观察后,我了解到该值仍然是用户输入之前的值。

这让我陷入了僵局,因为我看不出我会把它放在哪里。我觉得我在正确的位置,但我错过了一些东西。我在哪里进行此转换,以便从失败的验证中引发DataError事件?

我可能需要设置不同的属性吗?它就像我应该改变用户键入的内容,而不是像我试图做的那样直接改变单元格值...

1 个答案:

答案 0 :(得分:1)

您是否看过使用CellParsing事件?我似乎记得当我需要做类似的事情时使用它。