【问题标题】:How to sort DatagridView that is bound to DbSet Collection in order of clicked column header value如何按单击的列标题值的顺序对绑定到 DbSet 集合的 DatagridView 进行排序
【发布时间】:2017-02-22 03:13:47
【问题描述】:

我已经实现了一个 Windows 窗体应用程序,它使用实体框架库连接到远程 mysql 数据库,当我通过设置数据源第一次显示窗体时,数据显示正确。但是,当我单击列标题时,它不会按升序或降序对数据进行排序。

更多信息:

我使用以下方法为 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 事件中执行。

【问题讨论】:

    标签: c# winforms entity-framework datagridview


    【解决方案1】:

    如果你想让Automatic 排序模式为你工作,你需要使用支持排序的IBindingList 的实现。使用实体框架,DbSet<T>Local 属性的ToBindingList 方法返回一个可排序的BindingList<T>

    //using System.Data.Entity;
    using (var db = new MyDbContext())
    {
        db.SomeTable.Load();
        dataGridView1.DataSource = db.SomeTable.Local.ToBindingList();
    }
    

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

    LoadIQueryable 上的扩展方法,相当于调用ToList 然后丢弃列表而无需实际创建列表的开销。

    【讨论】:

    • 我尝试使用它,现在当我显示表单时,它没有显示表本身的数据。
    • 您应该先加载数据。可能你忘记加载数据了。
    • 您应该首先通过调用LoadToList()Load 数据转换为DbSet 以枚举IQueryable 并将其转换为实际数据。然后数据在Local 属性中。
    猜你喜欢
    • 2017-09-20
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 2015-12-17
    • 2022-01-23
    相关资源
    最近更新 更多