2010-10-04 226 views
0

我试图将DataGridView链接到数据库中的数据表。我想DataGridView自动更新数据表(无需点击“保存”或类似的东西)。在我看来,最好的办法是处理RowValidating事件。我一直在测试这段代码,这是我的问题:假设我通过输入DataGridView中的最后一个空行来添加行#1(行#1,但不一定是第一行),并输入一些错误的数据(空值或者应该有数字的文本等)。然后我按Enter键,出现一个新的空白行(第2行),没有错误信息。在这个新的行中,我输入了一些其他的数据,不对或不正确,然后再次按Enter键。现在我收到一条错误消息,第1行出现错误消息,但是焦点位于第2行,如果我尝试编辑第1行,我又收到一条错误消息,焦点停留在第2行。我该如何处理?如何解决DataGridView.RowValidating问题

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); 
     } 
    } 
+0

当您尝试将焦点更改回第1行时,您会收到什么错误消息? – 2010-10-04 05:04:06

+0

无论行#1是什么问题。我在我的帖子中解释了这个错误,并且在我的代码中的'MessageBox.Show(ex.Message);'显示了它。问题不在于错误。问题在于,在添加第2行而不是第1行之后出现错误,即包含该错误的错误。 – Juan 2010-10-04 05:10:43

回答

0

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

+0

我最终没有验证任何东西,并添加一个“保存”按钮,并尝试保存时进行所有验证。 – Juan 2011-07-15 18:59:31