如何按照单击列标题值的顺序对绑定到DbSet Collection的DatagridView进行排序

时间:2016-10-13 06:08:32

标签: c# winforms entity-framework datagridview

我已经实现了一个使用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事件上执行。

1 个答案:

答案 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

注意: 您应首先通过调用LoadToList()将数据加载到IQueryable以枚举IQueryable并将其转换为实际数据。然后数据在Local属性中。

LocalToList上的一种扩展方法,相当于调用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 ' ' ' ' ' ' ' 然后丢弃列表而不会产生实际创建列表的开销。