我已经实现了一个使用Entity Framework库连接到远程mysql数据库的Windows窗体应用程序,当我第一次通过设置数据源显示窗体时,数据显示正确。但是,当我单击列标题时,它不会按升序或降序对数据进行排序。
更多信息:
我使用以下方法设置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事件上执行。
答案 0 :(得分:1)
如果您希望Automatic
排序模式适合您,则需要使用支持排序的IBindingList
实现。使用实体框架,DbSet<T>
BindingList<T>
属性的ToBindingList
方法会返回可排序的//using System.Data.Entity;
using (var db = new MyDbContext())
{
db.SomeTable.Load();
dataGridView1.DataSource = db.SomeTable.Local.ToBindingList();
}
:
DbSet
注意:强>
您应首先通过调用Load
或ToList()
将数据加载到IQueryable
以枚举IQueryable
并将其转换为实际数据。然后数据在Local属性中。
Local
是ToList
上的一种扩展方法,相当于调用0001 55000 23/03/15
0001 5200 26/05/14
0001 8562 15/03/16
0001 85 25/03/16
0001 4562 29/06/16
0002 65 24/02/14
0002 4875 18/06/12
0002 142563 13/07/14
0002 1245 31/03/16
0002 7896 14/05/16
0002 4575 12/08/16
'
'
'
'
'
'
'
然后丢弃列表而不会产生实际创建列表的开销。