2010-10-22 9 views
1

Je suis nouveau à l'application de Windows. J'ai besoin d'ajouter dynamiquement des lignes dans le DataGrid qui a des données de personne. quand je fais ce qui suit est voir seulement la dernière personne dans la dernière rangée. Je vois des rangées peuplées mais sans données. Si je fais une pause au premier coup j'obtiens le bon. Mais quelque chose ne va pas. Toutes les idéesDataGrid: Danymically ajouter des lignes

foreach (var p in personList) 
     { 

      gvAdminSummary.Rows.Add(new DataGridViewRow()); 
      gvAdminSummary.Rows[gvAdminSummary.Rows.Count-1].Cells[0].Value = p.FName; 
      gvAdminSummary.Rows[gvAdminSummary.Rows.Count - 1].Cells[1].Value = p.LName; 
      gvAdminSummary.Rows[gvAdminSummary.Rows.Count - 1].Cells[2].Value = p.PNo; 


     } 
+0

Est-ce une grille liée aux données? Si c'est le cas, vous devez ajouter à la source de données et non la grille elle-même. –

+0

Je voudrais essayer MessageBox.Show gvAdminSummary.Rows.Count chaque cycle. Est-ce mis à jour? –

Répondre

1

La méthode DataGridRowView.Add accepte des tableaux de chaîne:

gvAdminSummary.Rows.Add({ p.FName, p.LName, p.PNo }); 

probable, cependant, il y a une meilleure solution pour vous dans la liaison de la grille directement à votre liste de personnes.

0

Cela peut ne pas être la bonne approche. Créez un BindingSource et liez-y une collection de vos objets. Puis lier le BindingSource à la source de données de la grille. Assurez-vous que vos objets implémentent INotifyPropertyChanged. De cette façon, à chaque fois que vous ajoutez un objet à la collection, ou que vous modifiez une propriété dans votre objet, elle sera automatiquement reflétée dans la grille.

0

Je ne sais pas à propos de DataGridView, mais si vous voulez coller à l'insertion de données dans le contrôle directement, pourquoi ne pas utiliser ListView à la place? Il a une API plus adaptée à vos besoins actuels ou à votre façon de faire les choses.

0

Soit

gvAdminSummary.Datasource = personnes; gvAdminSummary.databind();

Ou

foreach (var p dans PersonList) { DataGridViewRow dr = new DataGridViewRow(); dr.cells.add (nouveau datagridcell()) etc. peupler des cellules gvAdminSummary.Rows.add (dr);

} 
Questions connexes