如何解决DataGridView.RowValidating的问题

时间:2010-10-04 04:35:40

标签: c# .net sql

我正在尝试将DataGridView链接到数据库中的数据表。我希望DataGridView自动更新数据表(无需点击“保存”或类似的东西)。在我看来,最好的方法是处理RowValidating事件。我一直在测试这段代码,这是我的问题:假设我在DataGridView的最后一个空行中输入第1行(第1行,但不一定是第一行)并输入一些错误数据(不应存在的空值或应存在数字的文本等)。然后我按Enter键,出现一个新的空白行(第2行),没有错误消息。在这个新行中,我输入了一些其他数据,错误与否,然后再按Enter键。现在我收到一条错误消息,第1行出现错误气泡,但焦点在第2行,如果我尝试编辑第1行,我会再次收到错误消息并且焦点停留在第2行。我该怎么处理?

    public Form1()
    {
        InitializeComponent();
        sqlCeConnection.Open();
        table = new DataTable();
        sqlCeDataAdapter = new SqlCeDataAdapter("SELECT * FROM test", sqlCeConnection);
        SqlCeCommandBuilder cBuilder = new SqlCeCommandBuilder(sqlCeDataAdapter);
        sqlCeDataAdapter.Fill(table);

        BindingSource bSource = new BindingSource();
        bSource.DataSource = table;
        dataGridView1.DataSource = bSource;
    }

    private void dataGridView1_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
    {
        try
        {
            sqlCeDataAdapter.Update(table);
        }
        catch (Exception ex)
        {
            e.Cancel = true;
            MessageBox.Show(ex.Message);
        }
    }

1 个答案:

答案 0 :(得分:0)

我有同样的问题,我正试图解决。我发现了一些有趣的东西。如果鼠标单击以进行新建单元验证,则行验证。但是,如果您只需按Enter键,则只会进行单元格验证。我试图捕获Enter键以查看是否可以修改此行为,但Enter键不会捕获KeyUp或KeyDown事件上的新行。