如何将数据源绑定到 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控件和数据库的查询绑定起来啊。