如何将数据源绑定到 DataGridView 或 ListView

Posted

技术标签:

【中文标题】如何将数据源绑定到 DataGridView 或 ListView【英文标题】:How to bind a DataSource to DataGridView or 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

【问题讨论】:

【参考方案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 等获取查询结果。

【讨论】:

以上是关于如何将数据源绑定到 DataGridView 或 ListView的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据源绑定到 datagridview 组合框和复选框

在C#里怎么将DataGridView控件和数据库的查询绑定起来啊。

如何将 DataGridView 组合框添加到绑定的 DataGridView 数据源(以编程方式)

DataGridView控件用法一:数据绑定

DataGridView如何绑定字典集合数据

如何使用 Entity Framework 将多个表中的数据绑定到 datagridview 并使用 CRUD 操作?