将数据输入到数据网格视图的单元格中时,我可以在单元格验证之前修改其条目

本文关键字:单元格 数据 验证 修改 我可以 数据网 输入 网格 视图 | 更新日期: 2023-09-27 17:56:32

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

该列的格式设置为允许时间,并会自动将时间转换为标准 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 事件?

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

将数据输入到数据网格视图的单元格中时,我可以在单元格验证之前修改其条目

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