我对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,我不确定为什么?
感谢。
答案 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();
}