#c# #asp.net #gridview #linq-to-entities
#c# #asp.net #просмотр сетки #привязка к объектам
Вопрос:
Я довольно новичок в Entity Framework, а также LINQ. Я уже использовал DataGridView раньше и устанавливал для него источник данных
DataGridView1.datasource=dt; // dt=datatable
было достаточно. Но при чтении ASP.Net книга, в которой они предоставили код, использующий Entity Framework, как
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()
используется в конце. Я видел документ MSDN для DataBind()
, в котором говорится: «(Он) привязывает источник данных к вызываемому серверному элементу управления и всем его дочерним элементам управления».
И если я удалю его, я получу сообщение об ошибке «Экземпляр ObjectContext удален и больше не может использоваться для операций, требующих подключения».
Итак, я был просто смущен тем, что это DataBind()
на самом деле делает? Я видел, как некоторые люди также использовали DataBind для DataGridView, и я не уверен, почему?
Спасибо.
Ответ №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();
}
Комментарии:
1. Почему у этого есть только два лайка? Лучшее объяснение, которое я нашел в Google после 30 минут поиска.