C# 插入新行时,DataGridView单元格值不可用于验证
情况: 我正在用VS2013中的C#和.NET4.0编写一个Winforms应用程序 为了在DataGridView中执行单元级验证,我处理CellValidating事件。验证时,我使用访问用户输入值C# 插入新行时,DataGridView单元格值不可用于验证,c#,validation,datagridview,C#,Validation,Datagridview,情况: 我正在用VS2013中的C#和.NET4.0编写一个Winforms应用程序 为了在DataGridView中执行单元级验证,我处理CellValidating事件。验证时,我使用访问用户输入值 dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value 对于现有行的验证,这很好 问题: 当用户在新行的单元格中键入内容,然后按tab键(例如)移动到下一个单元格时,CellValidating事件将触发,但值始终包含null 问题: 在这些情况下,如何
dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value
对于现有行的验证,这很好
问题:
当用户在新行的单元格中键入内容,然后按tab键(例如)移动到下一个单元格时,CellValidating事件将触发,但值始终包含null
问题:
在这些情况下,如何访问用户键入的内容?我想我应该在验证之前进行EndEdit,但我认为CellValidating本质上是一个“编辑时”事件
编辑
验证在一个validator类中进行,其顶端如下所示:
public void ValidateCell(string tableName, DataGridView dataGrid, DataGridViewCellValidatingEventArgs e, ColumnCatalogue columnCatalogue)
{
if (!(dataGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null ||
dataGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == DBNull.Value ||
string.IsNullOrWhiteSpace(dataGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()))
)
{
ColumnDetails columnDetails = columnCatalogue.GetColumnDetails(tableName, dataGrid.Columns[e.ColumnIndex].Name);
switch (columnDetails.DataType)
{
case "currency":
this.ValidateCurrency(dataGrid, columnDetails, e);
break;
case "date":
this.ValidateDate(dataGrid, columnDetails, e);
break;
case "email":
this.ValidateEmail(dataGrid, columnDetails, e);
break;
case "int":
this.ValidateInt(dataGrid, columnDetails, e);
break;
case "phone":
this.ValidatePhone(dataGrid, columnDetails, e);
break;
case "postcode":
this.ValidatePostcode(dataGrid, columnDetails, e);
break;
default:
break;
}
}
}
由于数据尚未验证,因此它们不能位于
单元格的值字段中
相反,用户输入的输入既在单元格
的EditedFormattedValue
字段中:
dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue
e.FormattedValue
..和参数e
的FormattedValue
字段:
dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue
e.FormattedValue
请注意,这两种类型都是对象
,在(通常)作为字符串输入到文本框
控件中之后已经存在
还要注意对于现有的和填充的单元格,测试其值
字段实际上是在测试旧的、未编辑的值!因此,对于插入的行,您不会只有Value
有问题,所有行都有问题 你能发布完整验证方法的代码吗?@JustinRusso现在补充道,所有这些都非常有意义。现在工作完美无瑕。谢谢你花时间帮忙。