【问题标题】:How to bind a DataSource to DataGridView or ListView如何将数据源绑定到 DataGridView 或 ListView
【发布时间】:2015-07-16 17:21:04
【问题描述】:

我正在使用 Entity Framework 6.1 Code-First 的三层架构

UI 层中的代码

dataGridView1.DataSource = _userBLL.GetUsers();

业务逻辑层中的代码

public object GetUsers()
{
    return _userDAL.GetUsers();
}

数据访问层中的代码

public object GetUsers()
{
    return db.Users.Select(u => u);
}

我可以检索数据,但是在将 DataSource 分配给 DataGridView 时抛出以下错误:

不支持直接将数据绑定到存储查询(DbSet、DbQuery、DbSqlQuery、DbRawSqlQuery)。而是使用数据填充 DbSet,例如通过在 DbSet 上调用 Load,然后绑定到本地数据。对于 WPF 绑定到 DbSet.Local。对于 WinForms 绑定到 DbSet.Local.ToBindingList()。对于 ASP.NET WebForms,您可以绑定到在查询上调用 ToList() 的结果或使用模型绑定,有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=389592

谁能帮我解决这个错误?如何将检索到的数据源分配给 DataGridView 以及 ListView

【问题讨论】:

    标签: c# winforms entity-framework datagridview


    【解决方案1】:

    调用ToList() 方法。像这样:

    public object GetUsers()
    {
       return db.Users.ToList();
    }
    

    您也可以像这样使用AsQueryable():(返回IQueryable<T> 将推迟查询的执行,直到实际使用它的结果。)

    public IQueryable<User> GetUsers()
    {
       return db.Users.AsQueryable();
    }
    

    阅读这篇文章可能会有用:Why use AsQueryable() instead of List()

    【讨论】:

    • 谢谢.. ToList() 对我有用...你能告诉我,我怎么能把这个数据源分配给ListView
    • 您实际上无法绑定到 ListView 控件,因为它不支持绑定。
    • 感谢您的评论...所以在这种情况下,我们如何在ListView 控件中显示检索到的数据?
    【解决方案2】:

    你需要这样做

    public IEnumerable<User> GetUsers()
    {
        return db.Users.Select(u => u).ToList();
    }
    

    应用 ToList 并更改代码中的返回类型....您的代码有问题,因为您直接对数据网格进行查询...这个问题的原因是因为 linq 查询被延迟执行..这意味着您需要使用 ToList、Count 等获取查询结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      相关资源
      最近更新 更多