2009-11-12 1 views
4

Какая будет лучшая коллекция для связывания списка данных с DataGridview на C#? В настоящее время я использую только общий список, но сетка данных не обновляется, когда есть объекты, добавленные или удаленные из списка. Я посмотрел на использование BindingList или ObservableCollection, но не могу решить, какой из них лучше всего использовать, чтобы обновлять и легко сортировать/фильтровать, не переписывая данные в сетку данных. В настоящее время я работаю в форме Windows на базе .Net 3.5 с планами переезда в WPF в ближайшее время.Хорошая коллекция, используемая при привязке к DataGridView в C#

+0

Я также использую Linq для сортировки и фильтрации прямо сейчас в общем списке объектов. Я также могу использовать BindingList , но это заставляет меня перегруппировать список в сетку данных. – norlando

ответ

8
  • ObservableCollection<T> не будет работать на DataGridView: он реализует INotifyCollectionChanged, не IBindingList и DataGridView не знает о INotifyCollectionChanged. Он предназначен для привязок WPF и не используется в Windows Forms
  • BindingList<T> - хороший вариант, но обратите внимание, что он не поддерживает сортировку или фильтрацию из коробки. Однако вы можете найти некоторые пользовательские реализации этих функций в Интернете.
  • DataTable, вероятно, лучший вариант, если вам нужно сортировать и/или возможности фильтрации
+0

Могу ли я использовать DataTable с группой объектов? – norlando

+0

Что вы имеете в виду? Не могли бы Вы уточнить ? –

+0

У меня есть трехуровневое приложение с уровнем бизнес-объекта, и мне нужна коллекция одного типа бизнес-объекта. Возможно ли это с DataTable? Я думал, что DataTable может использоваться только с данными из базы данных. – norlando

0

A DataTable, возможно?

Кроме того, вы часто можете заставить сетку перерисовывать и включать новые элементы, вызывая DataGridview.Invalidate() сразу после добавления элементов.

0

Я не думаю, что существует жесткое правило общего типа того, какой тип коллекции лучше всего подходит для DataGridView.

Это действительно зависит от целого ряда факторов:
- Характер данных
- Какие операции (если таковые имеются) должны быть выполнены из пользовательского интерфейса к БД (например, CRUD, сортировать, фильтровать)
- Размер данных
и т. Д. И т. Д.

0

Я создал свою собственную коллекцию, наследующую от BindingList, которая поддерживает сортировку, фильтрацию и т. Д. Теперь это работает хорошо, но было много работы, я действительно не рекомендую делать это себя ... Я думаю, что есть один, уже реализованный в CodeProject или аналогичный сайт, я дам вам ссылку, если найду ее.

Edit:

Я нашел this CodeProject article с реализацией IBindingList, который поддерживает сортировку, фильтрацию и т.д. Я не проверял это, хотя, так что я не знаю, насколько хорошо реализация, но это может быть стоит проверить его.

1

Структура привязки данных полностью отличается между WinForms и WPF, поэтому (в общем), для обоих из них нет «лучшего выбора».

Для WinForms использование общего BindingList<T> выполнит большую часть того, что вы хотите (хотя оно не обрабатывает изменения отдельных элементов, вам придется реализовать это самостоятельно).

Для WPF ObservableCollection<T> выполняет аналогичную функцию.

+0

Есть ли причина, по которой BindingList не будет работать в WPF? – norlando

+0

'BindingList ' использует интерфейс 'IBindingList', который WinForms использует для привязки данных списка. WPF использует 'INotifyCollectionChanged'. –

1

На самом деле Microsoft reccomends с использованием коллекции в качестве привязки, коллекции, а не список из-за способности выполнять автоматические функции, как при добавлении и удаление элементов, очистка коллекции или установка значения существующего элемента.

Collection Class на MSDN.

1

Если вы хотите связать коллекцию с datagridview, я бы использовал список привязок. Хотя список привязок не поддерживает сортировку из коробки, вы можете расширить ее, создав свой собственный список, который происходит из BindinList и реализует вашу собственную сортировку.

См. here о том, как это сделать.

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