Я хочу показать пользовательскую коллекцию в DataGridView
в приложении Windows Forms. Эта пользовательская коллекция реализует ICollection
и IEnumerable
. Я установил BindingSource
, используя коллекцию как свойство .DataSource. DataGridView
установлен для использования моего BindingSource
в качестве источника данных. Когда я добавляю новый элемент в коллекцию с помощью метода BindingSource.Add()
, DataGridView
корректно обновляется с новым элементом. С другой стороны, источник данных BindingSource
не имеет значения:
MyCustomCollection myCollection = new MyCustomCollection();
myCollection.Add(myCustomObject1);
myCollection.Add(myCustomObject2);
myBindingSource.DataSource(myCollection);
myBindingSource.Add(myCustomObject3);
В приведенном выше коде внутренний список myBindingSource содержит правильное количество записей (3), а DataGridView
также содержит три записи, но myCollection содержит только две записи. Я знаю, что изменение базового myCollection НЕ обновит BindingSource
или DataGridView
, так как это не BindingList<T>
, но я был под впечатлением, что обновление BindingSource
напрямую обеспечило бы, чтобы myCollection был обновлен на то же время.
Есть ли способ использовать коллекцию, которая не является BindingList<T>
, и обновлять ее при непосредственном взаимодействии с BindingSource
?
Обновить. Один из способов, которым я обновил данные во всех частях (Collection, BindingSource, DataGridView), выглядит следующим образом:
myCollection.Add(myCustomObject3);
myBindingSource.DataSource = null;
myBindingSource.DataSource = myCollection;
Я уверен, что есть лучший способ атаковать эту проблему, но это единственный метод, который породил результаты, которые я ожидал.