Здравствуйте, Ziggi111, Вы писали:
F>>Помогите разобраться !!
F>>У контрола есть DataSourse типа BindingSource, У Неготоже есть DataSourse типа List<T>.
F>>Вопрос как контрол может узнать о изменение колекции List-а?
F>>Знаю одно DataGridView Вроде как то догадывается но КАК??
Z>А это разве не помогает?
Z>BindingSource.ListChanged += new ListChangedEventHandler (BindingSource_ListChanged);
Нет, не поможет.
Для того, чтобы BindingSource мог уведомлять об изменении коллекции, его источник данных должен реализовывать интерфейс IBindingSource.
Т.е. если ты делаешь myBindingSource.DataSource = typeof(Foo), тогда нижележащим контейнером данных для BindingSource будет BindingList<T>, который поддерживает уведомления и твой грид будет обновляться автоматически.
А если ты сделаешь так: myBindingSource.DataSource = new List<Foo>();, то сам BindingSource никогда не сможет узнать об изменении коллекции и грид обновляться не будет.
Вывод:
делай так:
myBindingSource.DataSource = typeof(Foo);
и операции над коллекцией выполняй непосредственно над объектом BindingSource, т.е. так:
myBindingSource.Add(new Foo());
myBindingSource.Remove();
и т.д.
Тогда грид будет обновляться автоматом.
Помогите разобраться !!
У контрола есть DataSourse типа BindingSource, У Неготоже есть DataSourse типа List<T>.
Вопрос как контрол может узнать о изменение колекции List-а?
Знаю одно DataGridView Вроде как то догадывается но КАК??
18.12.08 00:33: Перенесено модератором из '.NET' — TK
Здравствуйте, fabio, Вы писали:
F>Спасибо за помощь.
F>Теперь конкретно раззобрался.
Если "снаружи", за пределом биндингов и UI, хочется всё-же работать в типизированным списком IList<T>, то вместо List<T> надо попросту использовать
BindingList<T>. Этот класс строготипизирован, реализует IList<T> и сообщает о том, что его содержимое изменили.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>