我对DataGridView输入验证有一些严重的问题:
我正在使用 Entity Framework 开发一个项目,并且已将DataGridView元素绑定到数据库。
如果用户将一些数据插入到不可为空的列中,然后清除数据以将该列留空,然后单击另一个DataGridView单元格,则会发生异常并出现运行时错误。
或者,如果用户尝试将字符串插入整数列,他们会收到一条非常长的错误消息,这根本不利于用户。
验证DataGridView单元格是否有任何简单的方法?
我对DataGridView输入验证有一些严重的问题:
我正在使用 Entity Framework 开发一个项目,并且已将DataGridView元素绑定到数据库。
如果用户将一些数据插入到不可为空的列中,然后清除数据以将该列留空,然后单击另一个DataGridView单元格,则会发生异常并出现运行时错误。
或者,如果用户尝试将字符串插入整数列,他们会收到一条非常长的错误消息,这根本不利于用户。
验证DataGridView单元格是否有任何简单的方法?
我相信您正在寻找DataGridView.DataError
活动。如果您想对数据进行自定义验证,您应该处理此事件。像这样的东西:
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = entities;
dataGridView1.DataError += new DataGridViewDataErrorEventHandler(dataGridView1_DataError);
}
void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
// you can obtain current editing value like this:
string value = null;
var ctl = dataGridView1.EditingControl as DataGridViewTextBoxEditingControl;
if (ctl != null)
value = ctl.Text;
// you can obtain the current commited value
object current = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
string message;
switch (e.ColumnIndex)
{
case 0:
// bound to integer field
message = "the value should be a number";
break;
case 1:
// bound to date time field
message = "the value should be in date time format yyyy/MM/dd hh:mm:ss";
break;
// other columns
default:
message = "Invalid data";
break;
}
MessageBox.Show(message);
}
您可以检查输入数据的值并显示该值的相应错误消息。例如,如果 value 为 null 或为空并且该字段不可为 null,则可以显示一条消息,指示 value 不能为空。
希望这可以帮助。
将以下代码用于处理DataError
事件:
switch (e.ColumnIndex)
{
case 0:
// bound to integer field
message = "the value should be a number";
break;
case 1:
// bound to date time field
message = "the value should be in date time format yyyy/MM/dd hh:mm:ss";
break;
// other columns
default:
message = "Invalid data";
break;
}
MessageBox.Show(message);