2010-10-04 4 views
0

J'essaie de lier un DataGridView à un tableau de données dans une base de données. Je veux que le DataGridView mette à jour le tableau de données automatiquement (sans avoir à cliquer sur "Enregistrer" ou quelque chose comme ça). Il me semble que la meilleure façon de le faire est de gérer l'événement RowValidating. J'ai testé ce code et c'est mon problème: disons que j'ajoute la ligne # 1 (ligne # 1, mais pas nécessairement la première ligne) en tapant la dernière ligne vide dans le DataGridView et entrez des données erronées (valeurs nulles où il ne devrait pas y avoir ou texte où il devrait y avoir des nombres, etc.). Ensuite, j'appuie sur Entrée et une nouvelle ligne vide (ligne # 2) apparaît sans message d'erreur. Sur cette nouvelle ligne, je saisis d'autres données, erronées ou non, et j'appuie à nouveau sur Entrée. Maintenant, je reçois un message d'erreur et une bulle d'erreur apparaît sur la ligne n ° 1, mais sur la ligne n ° 2 et si j'essaie d'éditer la ligne n ° 1, un message d'erreur s'affiche à nouveau et la ligne n ° 2. Comment dois-je gérer cela?Comment réparer un problème avec 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

Quel message d'erreur obtenez-vous lorsque vous essayez de changer de focus à la ligne 1? –

+0

Tout ce qui ne va pas avec la ligne # 1. Je génère l'erreur dans le but que j'explique dans mon message, et le 'MessageBox.Show (ex.Message);' dans mon code le montre. Le problème n'est pas l'erreur. Le problème est que l'erreur apparaît après avoir ajouté la ligne 2 au lieu de la ligne 1, c'est-à-dire celle qui contient l'erreur. – Juan

Répondre

0

J'ai le même problème que j'essaie de résoudre. J'ai trouvé quelque chose d'intéressant. Si vous cliquez sur la souris, la validation de la cellule newrow se produit, puis la validation de la ligne. Cependant, si vous appuyez simplement sur Entrée, seule la validation des cellules se produit. J'ai essayé d'intercepter la touche Entrée pour voir si je pouvais modifier ce comportement, mais la touche Entrée ne piège pas sur les nouvelles lignes sur les événements KeyUp ou KeyDown.

+0

J'ai fini par ne rien valider et ajouter un bouton "Enregistrer" et faire toute la validation en essayant d'enregistrer. – Juan

Questions connexes