如何验证DataGridView输入?

时间:2012-08-04 17:49:57

标签: c# sql-server entity-framework data-binding datagridview

我对 DataGridView 输入验证有一些严重问题:

我正在使用Entity Framework开发一个项目,并且我已将 DataGridView 元素绑定到数据库。

如果用户将某些数据插入到不可为空的列中,然后清除数据以使列保持空白,则单击另一个 DataGridView 单元格,发生异常并运行时间错误。

或者,如果用户尝试将字符串插入整数列,则会收到一条非常长的错误消息,该消息根本不是用户友好的。

验证 DataGridView 单元格是否容易?

2 个答案:

答案 0 :(得分:2)

我相信你正在寻找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或为空且该字段不可为空,则可以显示一条消息,指示该值不能为空。

希望这有帮助。

答案 1 :(得分:0)

使用以下代码处理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);