我有一个dataGridView
包含多个列。第一列是标识符,必须是唯一的1位或2位数字。我使用单元格验证来确保标识符满足这些条件。用户根据需要输入数据,然后导出数据。导出数据后,程序会通过调用dataGridView
和grid.Clear()
来清除grid.Refresh()
。
这在大多数情况下运行良好,但有时当删除行时,我得到一个错误,指示第1列中的单元格编号不是唯一的。我不能一贯地重现这个错误;当我进入调试器时,如果我尝试在单元格验证步骤中断,我会发现它在清除期间没有被调用,正如我所期望的那样。然而,有时它会在明确期间突破,当然会导致问题。
有没有人对可能导致此问题的原因有任何想法?
编辑:这是我的cellValidate代码:
private void Grid_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
string headerText = Grid.Columns[e.ColumnIndex].HeaderText;
switch (headerText)
{
case "Number":
if (!String.IsNullOrEmpty(e.FormattedValue.ToString()))
{
if (!Regex.IsMatch(e.FormattedValue.ToString(), @"(^\d{1,2}$)"))
{
MessageBox.Show("Identifier number must be a 1 or 2 digit positive number");
e.Cancel = true;
}
else
{
foreach (DataGridViewRow r in Grid.Rows)
{
if (r.Cells[0].Value != null)
{
if (e.FormattedValue.ToString() == r.Cells[0].Value.ToString())
{
//this message box pops up sometimes when I call Grid.Clear()
MessageBox.Show("Identifier number must unique");
e.Cancel = true;
}
}
}
}
}
break; //more cases for each column
答案 0 :(得分:0)
问题结果是我有时清除了dataGridView,并且选中了标识符列中的一个单元格,从而使焦点清晰。通过关闭多选并在调用clear()之前将焦点更改为不同的单元格,我能够解决问题。
答案 1 :(得分:0)
在Grid_CellValidating事件中使用布尔值并绕过它,在清除Datagridview之后,您可以重置布尔值