将数据输入到数据网格视图的单元格中时,我可以在单元格验证之前修改其条目
本文关键字:单元格 数据 验证 修改 我可以 数据网 输入 网格 视图 | 更新日期: 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 事件?我似乎记得当我需要做类似的事情时使用它。