2010-10-04 225 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