DataGridView验证-删除错误指示符
本文关键字:错误 指示符 删除 验证 DataGridView | 更新日期: 2023-09-27 18:01:18
我正在使用以下代码验证DataGridView…
void centreDataGridView_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
if (centreDataGridView.Columns[e.ColumnIndex].Name == "code")
{
Regex codeRegex = new Regex("^[0-9]{5}[0-9A-Z]$");
if (!codeRegex.IsMatch(e.FormattedValue.ToString()))
{
centreDataGridView.Rows[e.RowIndex].ErrorText = "error text here";
}
}
}
void centreDataGridView_CellEndEdit(object sender,
DataGridViewCellEventArgs e)
{
centreDataGridView.Rows[e.RowIndex].ErrorText = string.Empty;
}
这可以工作,但是如果我输入新行,然后在不输入任何数据的情况下再次离开,则错误警告图标在新行选择器中仍然可见。我怎样才能结算呢?
根据目前收到的建议,我将上述代码修改如下…
void centreDataGridView_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
if (centreDataGridView.Columns[e.ColumnIndex].Name == "code")
{
if (!(centreDataGridView.Rows[e.RowIndex].IsNewRow) ||
(e.FormattedValue.ToString() != string.Empty))
{
Regex codeRegex = new Regex("^[0-9]{5}[0-9A-Z]$");
if (!codeRegex.IsMatch(e.FormattedValue.ToString()))
{
centreDataGridView.Rows[e.RowIndex].ErrorText = "error text here";
}
}
}
}
这确实解决了当没有输入数据时在新行旁边显示错误指示符的问题。但是,当我在任何行中输入无效数据时,当我在输入无效数据后第一次移出该行时,不会显示任何错误指示符。如果移出包含无效数据的行,然后移回该行,然后再次移出该行,则会显示错误指示符。
好的,我想我现在明白了。我在cellvalidation事件处理程序的开始处将ErrorText设置为空字符串,而不是在cellenddit事件处理程序中,如下所示。这基本上是收到的所有建议的组合,所以谢谢大家,它们都很有帮助。
void centreDataGridView_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
centreDataGridView.Rows[e.RowIndex].ErrorText = string.Empty;
if (centreDataGridView.Columns[e.ColumnIndex].Name == "code")
{
if (!(centreDataGridView.Rows[e.RowIndex].IsNewRow) ||
(e.FormattedValue.ToString() != string.Empty))
{
Regex codeRegex = new Regex("^[0-9]{5}[0-9A-Z]$");
if (!codeRegex.IsMatch(e.FormattedValue.ToString()))
{
centreDataGridView.Rows[e.RowIndex].ErrorText = "blah blah blah";
}
}
}
}
添加验证行是否为NewRow
的检查,如果是则返回。
void centreDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (centreDataGridView.Rows[e.RowIndex].IsNewRow)
{
return; // do not validate row that has no values
}
if (centreDataGridView.Columns[e.ColumnIndex].Name == "code")
{
Regex codeRegex = new Regex("^[0-9]{5}[0-9A-Z]$");
if (!codeRegex.IsMatch(e.FormattedValue.ToString()))
{
centreDataGridView.Rows[e.RowIndex].ErrorText = "error text here";
}
}
}