2016-11-20 6 views
1

У меня есть список объектов, и я хочу повторно привязать DataGridView в каждую секунду. Я пробовал много вещей, bindingsource, BindingList с интерфейсом INotifyPropertyChanged. Они отлично работают, когда у вас есть статическая коллекция в вашем коде, но мне нужно обновить источник данных из базы данных, поэтому я должен итерации каждого объекта и проверить, является ли он новым или удаленным, и обновить BindingList, но это решение. Я предпочитаю писать, как это в каждом втором:Обновление DataGridView Control DataSource C# Win Forms

BindingListObeject = new BindingList<MyObject>(ListOfMyObjects); 

или

BindingListObeject.Clear(); 
//in loop 
BindingListObeject.Add(new_object); 

DataGridView будет прокрутки, а также выбранная ячейка должна быть выбрана после того, как подмена источника данных. А также сетка не должна мерцать.

Как я могу это сделать? Я использую EF для получения нужного вам списка объектов.

+0

Вы пробовали Suspend/ResumeLayout, чтобы избежать мерцания? – McNets

+0

Да, я пробовал, все еще мерцаю –

ответ

1

Попробуйте ObservableCollection() или любую другую коллекцию с CollectionChange событием

И не когда-нибудь сделать что-то вроде MyCollection = ... ничего ... то будет сделать новый объект с новой ручкой для MyCollection, некоторого времени вашей сетки еще привязан к старой ручке. Просто измените коллекцию, не обновляйте ее.

+0

Кажется, что это работает, но когда я переустанавливаю gridview, строки сетки источника данных не выполняются, как я вижу. Для теста я удаляю элементы из своего списка, а затем восстанавливаю источник данных, в элементе вида удаляется, все в порядке, но строки сетки по-прежнему совпадают, я буду отлаживать больше и писать результаты здесь –

+0

Использую, сначала удаляю один элемент из списка , затем установите снова источник данных, а затем DataGridView.refresh(), но подсчет строк сетки вообще не отражается. Мне нужно как-то обновить строки также со стороны кода, в элементе вида удаляется. Что не так? –

+0

Кажется, что это не вариант, ObservableCollection реализует INotifyCollectionChanged, а не IBindingList, а DataGridView не знает об INotifyCollectionChanged. :(Любые идеи? Я хочу снова использовать его в win-формах –

Смежные вопросы