#c# #winforms #entity-framework #datagridview
#c# #winforms #entity-framework #datagridview
Вопрос:
Я реализовал приложение Windows form, которое подключается к удаленной базе данных mysql с использованием библиотеки Entity Framework, и когда я впервые отображаю форму, задав источник данных, данные отображаются правильно. Однако, когда я нажимаю заголовок столбца, он не сортирует данные в порядке возрастания или убывания.
Дополнительная информация:
Я установил источник данных для datagridview, используя:
using (databaseContext db = new databaseContext())
{
myDataGridView.DataSource = db.someTable.ToArray();
foreach (DataGridViewColumn column in myDataGridView.Columns)
{
myDataGridView.Columns[column.Name].SortMode = DataGridViewColumnSortMode.Automatic;
}
}
Этот код выполняется в событии listLoad для формы, которую я пытаюсь отобразить.
Ответ №1:
Если вы хотите Automatic
, чтобы режим сортировки работал для вас, вам необходимо использовать реализацию IBindingList
, которая поддерживает сортировку. Используя Entity Framework, ToBindingList
метод Local
свойства DbSet<T>
возвращает сортируемый BindingList<T>
:
//using System.Data.Entity;
using (var db = new MyDbContext())
{
db.SomeTable.Load();
dataGridView1.DataSource = db.SomeTable.Local.ToBindingList();
}
Примечание:
Сначала вы должны загрузить данные DbSet
, вызвав Load
or ToList()
, чтобы перечислить IQueryable
и преобразовать их в фактические данные. Тогда данные находятся в локальном свойстве.
Load
включен метод расширения IQueryable
и эквивалентен вызову, ToList
а затем удалению списка без накладных расходов на фактическое создание списка.
Комментарии:
1. Я попытался использовать это, и теперь, когда я отображаю форму, она не отображает данные, которые находятся в самой таблице.
2. Сначала вы должны загрузить данные. Вероятно, вы забыли загрузить данные.
3. Сначала вы должны
Load
ввести данныеDbSet
, вызвавLoad
илиToList()
перечислив IQueryable и преобразовав его в фактические данные. Тогда данные находятся вLocal
свойстве.