2011-04-20 3 views

Répondre

4

Le générique List<T> ne prend pas complètement en charge la liaison au DataGridView, comme vous pouvez le constater, vous pouvez modifier les éléments de la liste sans les ajouter ni les supprimer. Ce que vous devez utiliser est BindingList<T> ou BindingSource.

Le BindingList<T> vous permettra d'utiliser l'interface utilisateur pour ajouter et supprimer des lignes de la grille - lorsque vous changez DataSource pour cela, vous verrez la nouvelle ligne vide au bas de la grille. Vous ne pouvez toujours pas ajouter ou supprimer des lignes par programmation. Pour cela, vous avez besoin d'un BindingSource.

Un exemple des deux est ci-dessous (en utilisant un exemple de classe Users, mais le détail de ce n'est pas important ici).

public partial class Form1 : Form 
{ 
    private List<User> usersList; 
    private BindingSource source; 

    public Form1() 
    { 
     InitializeComponent(); 

     usersList = new List<User>(); 
     usersList.Add(new User { PhoneID = 1, Name = "Fred" }); 
     usersList.Add(new User { PhoneID = 2, Name = "Tom" }); 

     // You can construct your BindingList<User> from the List<User> 
     BindingList<User> users = new BindingList<User>(usersList); 

     // This line binds to the BindingList<User> 
     dataGridView1.DataSource = users; 

     // We now create the BindingSource 
     source = new BindingSource(); 

     // And assign the List<User> as its DataSource 
     source.DataSource = usersList; 

     // And again, set the DataSource of the DataGridView 
     // Note that this is just example code, and the BindingList<User> 
     // DataSource setting is gone. You wouldn't do this in the real world 
     dataGridView1.DataSource = source; 
     dataGridView1.AllowUserToAddRows = true;    

    } 

    // This button click event handler shows how to add a new row, and 
    // get at the inserted object to change its values. 
    private void button1_Click(object sender, EventArgs e) 
    { 
     User user = (User)source.AddNew(); 
     user.Name = "Mary Poppins"; 
    } 
} 
+0

Merci beaucoup! Votre réponse et vos explications sont en jeu. J'ai utilisé BindingList comme collection source. – Peter17

+0

@ Peter17 par UI Je voulais simplement dire qu'avec BindingList lié à la grille, vous pouvez maintenant ajouter et supprimer des éléments de la liste en utilisant la grille elle-même. –

2

Il ya des événements OnUserAddedRow et OnUserDeletedRow auxquels vous pouvez vous abonner afin que vous puissiez modifier votre collection sur l'action de l'utilisateur.

+0

Merci. Mais il n'y a aucune ligne vide sur les fonds de DataGridView, malgré le fait que AllowUserAddRows a la valeur true. – Peter17

+0

Est-il possible d'ajouter des lignes via DataGridView délimité? Ou devrais-je utiliser autre chose pour atteindre cet objectif? – Peter17

+1

L'exemple sur le MSDN a 2 boutons pour ajouter et supprimer des lignes: http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.aspx –

Questions connexes