ObjectDataSource + GridView = срабатывает дважды - PullRequest
0 голосов
/ 05 февраля 2012

У меня есть GridView, связанный с ObjectDataSource.Я вижу, SelectMethod и SelectCountMethod запускаются дважды.В GridView RowDataBound у меня есть gv.ShowFooter = false;Когда я комментирую эту строку, события происходят только один раз.Почему это происходит?Как обойти это?Я не понимаю, почему скрытие одного элемента в результатах элемента управления с привязкой к данным приводит к повторному связыванию ObjectDataSource?

1 Ответ

0 голосов
/ 06 февраля 2012

RowDataBound событие запускается, когда GridView получает привязку к данным (это означает срабатывание SelectMethod).

Теперь для переключения свойств, таких как ShowFooter, требуется сетка для повторного создания строк, а это означает, что данные должны быть снова привязаны. Вот почему объектный источник данных снова сработает.

Решением будет установка свойства ShowFooter ранее (вместо RowDataBound). Если это невозможно, поместите логику в своем классе источника данных объекта в кеш данных, чтобы вам не приходилось дважды посещать хранилище данных. Например,

// Code Behind Class
public partial class MyPage : System.Web.UI.Page
{

  private object _data;

  public static object SelectData()
  {
     // get the current page instance
     var page = HttpContext.Current.CurrentHandler as MyPage;
     if (null != page._data)
     {
         return page._data;
     }

     // logic to retrieve the data
     ...
     _data = ...
     return _data;
  }

...


  private void RefreshGrid()
  {
     _data = null; // force the data-source to go to database again
     grid.DataBind();
  }
}

Отказ от ответственности: непроверенный код только для иллюстрации

Итак, в приведенном выше коде для получения данных используется статический метод для выделения кода страницы. А локальная переменная в классе страницы используется для кэширования данных. Также обратите внимание, что для обновления сетки вам может потребоваться очистить переменную перед вызовом метода DataBind для сетки.

...