Какая будет лучшая коллекция для связывания списка данных с DataGridview на C#? В настоящее время я использую только общий список, но сетка данных не обновляется, когда есть объекты, добавленные или удаленные из списка. Я посмотрел на использование BindingList или ObservableCollection, но не могу решить, какой из них лучше всего использовать, чтобы обновлять и легко сортировать/фильтровать, не переписывая данные в сетку данных. В настоящее время я работаю в форме Windows на базе .Net 3.5 с планами переезда в WPF в ближайшее время.Хорошая коллекция, используемая при привязке к DataGridView в C#
ответ
ObservableCollection<T>
не будет работать наDataGridView
: он реализуетINotifyCollectionChanged
, неIBindingList
иDataGridView
не знает оINotifyCollectionChanged
. Он предназначен для привязок WPF и не используется в Windows FormsBindingList<T>
- хороший вариант, но обратите внимание, что он не поддерживает сортировку или фильтрацию из коробки. Однако вы можете найти некоторые пользовательские реализации этих функций в Интернете.DataTable
, вероятно, лучший вариант, если вам нужно сортировать и/или возможности фильтрации
Могу ли я использовать DataTable с группой объектов? – norlando
Что вы имеете в виду? Не могли бы Вы уточнить ? –
У меня есть трехуровневое приложение с уровнем бизнес-объекта, и мне нужна коллекция одного типа бизнес-объекта. Возможно ли это с DataTable? Я думал, что DataTable может использоваться только с данными из базы данных. – norlando
A DataTable, возможно?
Кроме того, вы часто можете заставить сетку перерисовывать и включать новые элементы, вызывая DataGridview.Invalidate() сразу после добавления элементов.
Я не думаю, что существует жесткое правило общего типа того, какой тип коллекции лучше всего подходит для DataGridView.
Это действительно зависит от целого ряда факторов:
- Характер данных
- Какие операции (если таковые имеются) должны быть выполнены из пользовательского интерфейса к БД (например, CRUD, сортировать, фильтровать)
- Размер данных
и т. Д. И т. Д.
Я создал свою собственную коллекцию, наследующую от BindingList, которая поддерживает сортировку, фильтрацию и т. Д. Теперь это работает хорошо, но было много работы, я действительно не рекомендую делать это себя ... Я думаю, что есть один, уже реализованный в CodeProject или аналогичный сайт, я дам вам ссылку, если найду ее.
Edit:
Я нашел this CodeProject article с реализацией IBindingList, который поддерживает сортировку, фильтрацию и т.д. Я не проверял это, хотя, так что я не знаю, насколько хорошо реализация, но это может быть стоит проверить его.
Структура привязки данных полностью отличается между WinForms и WPF, поэтому (в общем), для обоих из них нет «лучшего выбора».
Для WinForms использование общего BindingList<T>
выполнит большую часть того, что вы хотите (хотя оно не обрабатывает изменения отдельных элементов, вам придется реализовать это самостоятельно).
Для WPF ObservableCollection<T>
выполняет аналогичную функцию.
Есть ли причина, по которой BindingList
'BindingList
На самом деле Microsoft reccomends с использованием коллекции в качестве привязки, коллекции, а не список из-за способности выполнять автоматические функции, как при добавлении и удаление элементов, очистка коллекции или установка значения существующего элемента.
Collection Class на MSDN.
Если вы хотите связать коллекцию с datagridview, я бы использовал список привязок. Хотя список привязок не поддерживает сортировку из коробки, вы можете расширить ее, создав свой собственный список, который происходит из BindinList и реализует вашу собственную сортировку.
См. here о том, как это сделать.
- 1. C# Datagridview - выключить AutoGenerateColumns при привязке к файлу XML?
- 2. Хорошая коллекция библиотек для C?
- 3. Вставка новых строк в DataGridView при привязке к BindingSource
- 4. DataGridView не обновляется при привязке BindingList изменяется
- 5. Индекс столбца Datagridview меняется при привязке к datatable
- 6. DataGridView отображает пустые ячейки при привязке к типу DataTable
- 7. Нет столбцов при привязке анонимного списка к DataSource DataGridView
- 8. datagridview с combobox, не отображающим данные при привязке к Datatable
- 9. JS скрывает div при привязке к привязке
- 10. Лучший подход к привязке datagridview к объекту базы данных
- 11. Добавить собственные столбцы в привязке DataGridview
- 12. C# wpf привязка к привязке
- 13. Обрезная коллекция, используемая для расчета расстояния
- 14. Ошибка при вызове SetAccessor при привязке функций C++ к V8
- 15. C# async SocketException при привязке
- 16. Метод обрезки в привязке к привязке к серверу
- 17. Backbone.js Ошибка при привязке модели к виду
- 18. привязка к datagridview в C#?
- 19. Ошибка при привязке данных gridview к datatable
- 20. Проверка WPF DataGrid при привязке к DataView
- 21. Ошибки при привязке данных к сетке
- 22. Проверка данных DataGrid при привязке непосредственно к DataTable - C#/WPF
- 23. C#: изменение порядка столбцов при привязке DataTable к GridView
- 24. Анимация неверна при привязке к видимости (Oddity)
- 25. Создание вывода при привязке к математической библиотеке
- 26. C# Databinding коллекция суб объектов
- 27. ArrayList (коллекция c) VS HashSet (коллекция c)
- 28. Что такое коллекция TempData, используемая в asp.net MVC?
- 29. Есть ли способ поднять PropertyChanged при привязке к модели?
- 30. Ошибка при привязке данных к gridview
Я также использую Linq для сортировки и фильтрации прямо сейчас в общем списке объектов. Я также могу использовать BindingList, но это заставляет меня перегруппировать список в сетку данных. –
norlando