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

本文关键字:DataGridView ListView 绑定 数据源 | 更新日期: 2023-09-27 18:02:59

我使用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 ?

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

调用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()

你需要这样做

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

应用ToList并更改返回类型,如代码....所示你的代码有问题,因为你直接向你的数据网格隐藏查询…这个问题是因为linq查询的执行方式不同。这意味着您需要通过使用ToList, Count等来获取查询结果。