DataBind() в C#

#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 минут поиска.