Добавление записей при привязке сетки данных к списку объектов в приложении winforms
У меня есть следующие классы:
public class MyItems : List<MyItem>
{
...
}
public class MyItem
{
...
}
Я создал экземпляр MyItems и назначил его свойству DataSource сетки данных WinForms.
Все отображается правильно, но когда я пытаюсь добавить строки, ничего не происходит. Что я делаю, так это возвращаю сетки DataSource обратно в MyItems, добавляю к нему экземпляр MyItems и затем возвращаю DataSource обратно в список. Я могу пройтись по коду и увидеть, что количество элементов в источнике данных растет, но сетка не отображает их. Есть идеи?
//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;
1 ответ
Для того, чтобы изменения в источнике данных отображались, он должен реализовать System.ComponentModel.IBindingList
интерфейс. Это интерфейс, который обеспечивает ListChanged
событие, к которому привязывается сетка, чтобы обнаружить изменения в списке (добавление и удаление элементов) или в строках (изменение значений свойств).
Кроме того, ITypedList
Интерфейс - это то, что позволяет дизайнеру обнаруживать свойства и то, как сетка может выполнять привязку данных с лучшей производительностью, чем привязка на основе отражения.
Если вы просто ищете базовые уведомления и ваш базовый класс уже наследуется от чего-то вроде List<T>
попробуйте сменить родителя на System.ComponentModel.BindingList<T>
, Это имеет простую реализацию IBindingList
интерфейс уже. Вам придется проделать больше работы, если вы хотите более сложные вещи, такие как сортировка или поддержка уведомлений об изменении свойств, но это обеспечивает реализацию для базового добавления и удаления.