Привязка списка к DataGridView в WinForm
у меня есть класс
class Person{
public string Name {get; set;}
public string Surname {get; set;}
}
и List<Person> к которому я добавляю некоторые элементы. Список привязан к моему DataGridView.
List<Person> persons = new List<Person>();
persons.Add(new Person(){Name="Joe", Surname="Black"});
persons.Add(new Person(){Name="Misha", Surname="Kozlov"});
myGrid.DataSource = persons;
нет проблем. myGrid отображает две строки, но когда я добавляю новые элементы в мой persons список myGrid не показывает новый обновленный список. Это показывает только две строки, которые я добавил раньше.
так в чем проблема?
Rebinding каждый раз работает хорошо. Но когда я связываю a DataTable к сетке, когда каждый раз когда я делаю некоторые изменения в DataTable нет никакой необходимости в повторной привязке myGrid.
как решить ее без повторной привязки каждый раз?
4 ответов:
список не реализует
IBindingListтаким образом, сетка не знает о ваших новых элементах.привязать DataGridView к .
var list = new BindingList<Person>(persons); myGrid.DataSource = list;но я бы даже пошел дальше и привязал вашу сетку к
BindingSourcevar list = new List<Person>() { new Person { Name = "Joe", }, new Person { Name = "Misha", }, }; var bindingList = new BindingList<Person>(list); var source = new BindingSource(bindingList, null); grid.DataSource = source;
каждый раз, когда вы добавляете новый элемент в список, вам нужно повторно привязать сетку. Что-то вроде:
List<Person> persons = new List<Person>(); 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;
после добавления нового элемента в
personsдобавить:myGrid.DataSource = null; myGrid.DataSource = persons;
Да, это можно сделать с out rebinding, реализовав интерфейс INotifyPropertyChanged.
довольно простой пример доступен здесь,
http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx
Comments