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 для сетки.