Liste de liaisons à DataGridView dans WinForm

j’ai un cours

class Person{ public ssortingng Name {get; set;} public ssortingng Surname {get; set;} } 

et une List à laquelle j’ajoute des éléments. La liste est liée à mon DataGridView .

 List persons = new List(); persons.Add(new Person(){Name="Joe", Surname="Black"}); persons.Add(new Person(){Name="Misha", Surname="Kozlov"}); myGrid.DataSource = persons; 

Il n’y a pas de problème. myGrid affiche deux lignes, mais lorsque j’ajoute de nouveaux éléments à ma liste de persons , myGrid pas la nouvelle liste mise à jour. Il ne montre que les deux lignes que j’ai ajoutées auparavant.

Alors quel est le problème?

La reliure à chaque fois fonctionne bien. Mais lorsque je lie un DataTable à la grid lorsque chaque fois que j’apporte des modifications à DataTable il n’est pas nécessaire de rebindir myGrid .

Comment le résoudre sans se relier à chaque fois?

List n’implémente pas IBindingList afin que la grid ne connaisse pas vos nouveaux éléments.

Liez votre DataGridView à un BindingList place.

 var list = new BindingList(persons); myGrid.DataSource = list; 

Mais je voudrais même aller plus loin et lier votre grid à un BindingSource

 var list = new List() { new Person { Name = "Joe", }, new Person { Name = "Misha", }, }; var bindingList = new BindingList(list); var source = new BindingSource(bindingList, null); grid.DataSource = source; 

Chaque fois que vous ajoutez un nouvel élément à la liste, vous devez relier votre grid. Quelque chose comme:

 List persons = new List(); persons.Add(new Person() { Name = "Joe", Surname = "Black" }); persons.Add(new Person() { Name = "Misha", Surname = "Kozlov" }); dataGridView1.DataSource = persons; // added a new item persons.Add(new Person() { Name = "John", Surname = "Doe" }); // bind to the updated source dataGridView1.DataSource = persons; 

Après avoir ajouté un nouvel article à des persons ajoutez:

 myGrid.DataSource = null; myGrid.DataSource = persons; 

Oui, il est possible de le faire sans relier en implémentant l’interface INotifyPropertyChanged.

Pretty Simple exemple est disponible ici,

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx