C# 如何修复DataGridView.RowView的问题

C# 如何修复DataGridView.RowView的问题,c#,.net,sql,C#,.net,Sql,我正在尝试将DataGridView链接到数据库中的数据表。我希望DataGridView自动更新数据表(无需单击“保存”或类似操作)。在我看来,做到这一点的最佳方法是处理事件。我一直在测试这段代码,这就是我的问题:假设我通过在DataGridView的最后一个空白行中键入来添加第1行(第1行,但不一定是第一行),并输入一些错误数据(不应该有空值或应该有数字的文本,等等)。然后我按Enter键,出现一个新的空行(第2行),没有错误消息。在这一新行中,我输入了一些其他数据,无论是否错误,然后再次按

我正在尝试将
DataGridView
链接到数据库中的数据表。我希望
DataGridView
自动更新数据表(无需单击“保存”或类似操作)。在我看来,做到这一点的最佳方法是处理事件。我一直在测试这段代码,这就是我的问题:假设我通过在
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);
        }
    }

我也有同样的问题要解决。我发现了一些有趣的东西。如果鼠标单击以新建行,则会进行单元格验证,然后进行行验证。但是,如果只按enter键,则只会进行单元格验证。我已尝试捕获Enter键以查看是否可以修改此行为,但在KeyUp或KeyDown事件中,Enter键都不会捕获新行。

尝试将焦点更改回第1行时,会收到什么错误消息?第1行有什么问题吗。正如我在帖子中解释的那样,我故意生成错误,并生成
MessageBox.Show(例如Message)在我的代码中显示它。问题不在于错误。问题是,在我添加第2行而不是包含错误的第1行之后,会出现错误。我最终没有验证任何内容,添加了“保存”按钮,并在尝试保存时执行所有验证。