如何将DataSource绑定到DataGridView或ListView

时间:2015-07-16 17:21:05

标签: c# winforms entity-framework datagridview

我正在使用实体框架6.1代码优先的三层架构

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

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

你需要这样做

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

应用ToList并在代码中更改您的返回类型....您的代码有问题,因为您直接将查询绑定到您的数据网格...这个问题导致因为linq查询被执行得失败...这意味着你需要通过使用ToList,Count等来获得查询结果。