Добавление записей при привязке сетки данных к списку объектов в приложении winforms

У меня есть следующие классы:

public class MyItems : List<MyItem>
{
...
}

public class MyItem
{
...
}

Я создал экземпляр MyItems и присвоил его свойству DataSource сетки данных WinForms.

Все отображается правильно, но когда я пытаюсь добавить строки, ничего не происходит. Что я делаю, так это возвращаю источник данных сетки обратно в MyItems, добавляю к нему экземпляр MyItems, а затем возвращаю источник данных в список. Я могу просмотреть код и увидеть, что количество элементов в источнике данных растет, но сетка их не отображает. Любые идеи?

//Form Load
MyItems lstItems = new MyItems();
lstItems.Add(new MyItem("1"));
lstItems.Add(new MyItem("2"));

//Grid displays two rows;
grd.DataSource = lstItems;

//Add button click event
MyItems lstItmes = (MyItems)grd.DataSource;
lstItems.Add(new MyItem("3"));

//Grid does not display new row
grd.DataSource = lstItems;

person Jeremy    schedule 10.12.2009    source источник


Ответы (1)


Чтобы изменения в источнике данных отображались, он должен реализовать интерфейс System.ComponentModel.IBindingList. Это интерфейс, предоставляющий событие ListChanged, к которому подключается сетка, чтобы обнаруживать изменения в списке (добавление и удаление элементов) или в строках (изменение значений свойств).

Кроме того, интерфейс ITypedList — это то, что позволяет разработчику обнаруживать свойства и то, как сетка может выполнять привязку данных с большей производительностью, чем привязка на основе отражения.

Если вы просто ищете базовые уведомления, а ваш базовый класс уже наследуется от чего-то вроде List<T>, попробуйте изменить родителя на System.ComponentModel.BindingList<T>. Это уже имеет простую реализацию интерфейса IBindingList. Вам придется проделать больше работы, если вам нужны более продвинутые вещи, такие как сортировка или поддержка уведомлений об изменении свойства, но он предоставляет реализацию для базового добавления и удаления.

person Adam Robinson    schedule 10.12.2009