Привязка списка к 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.



как решить ее без повторной привязки каждый раз?

851   4  

4 ответов:

список не реализует IBindingList таким образом, сетка не знает о ваших новых элементах.

привязать DataGridView к .

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

но я бы даже пошел дальше и привязал вашу сетку к BindingSource

var 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

    Ничего не найдено.