C#中的DataBind()

时间:2011-11-06 08:01:18

标签: c# asp.net gridview linq-to-entities

我对Entity框架和LINQ都相当新。我之前使用过DataGridView并将数据源设置为

DataGridView1.datasource=dt; // dt=datatable

就够了。但在阅读ASP.Net书时,他们已经使用实体框架作为代码

using (PlanetWroxEntities myEntities = new PlanetWroxEntities())
{
    var allGenres = from genre in myEntities.Genres
    orderby genre.Name
    select new { genre.Name, genre.Reviews };
    GridView1.DataSource = allGenres;
    GridView1.DataBind();
}

为什么最后会使用DataBind()。我已经看到DataBind()的MSDN文档说“(It)将数据源绑定到调用的服务器控件及其所有子控件。”

如果我删除它,我会收到一个错误,因为“ObjectContext实例已被释放,不能再用于需要连接的操作。”

所以我很困惑这个DataBind()究竟是做什么的?我见过有些人也在使用DataBind for DataGridView,我不确定为什么?

感谢。

1 个答案:

答案 0 :(得分:1)

DataBind方法强制读取数据源并将其绑定到控件。由于您在之后处置的PlanetWroxEntities上下文中进行了数据绑定,因此控件应在PlanetWroxEntities处置之前从数据源读取数据。换句话说:在数据库连接关闭之前。

另一种方法是通过调用.ToList()方法强制查询。这会将DataSource属性设置为包含具体数据的非惰性列表。

using (PlanetWroxEntities myEntities = new PlanetWroxEntities())
{
    var allGenres = from genre in myEntities.Genres
    orderby genre.Name
    select new { genre.Name, genre.Reviews };
    GridView1.DataSource = allGenres.ToList();
}