Я делаю изменения условного форматирования данных в моем виде сетки, используя событие RowDataBound:
void gvReg_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DateTime lastUpdate DateTime.Parse(DataBinder.Eval (e.Row.DataItem, "LAST_UPDATE");
if (lastUpdate < DateTime.Today.AddMonths(-1))
{
Hyperlink hypLastUpdate = (Hyperlink)e.Row.FindControl("hypLastUpdate";
hypLastUpdate.CssClass = "Error";
hypLastUpdate.NavigateUrl = "http://www.someExampleErrorPage.com";
}
}
}
Это работает и устанавливает правильный класс CssClass для гиперссылки (что делает его ярким оттенком жирного красного цвета), но после сортировки вида сетки (посредством нажатия пользователем заголовка столбца) класс css сбрасывается в hypLastUpdate и теряет свой стиль и связанное свойство NavigateUrl.
Элемент управления hypLastUpdate содержится в поле шаблона в виде сетки, и его текстовое значение привязано к полю с именем "LAST_UPDATE".
Это запланированное поведение (предполагается, что сортировка нарушает условное форматирование, выполняемое в событиях RowDataBound?) Или есть что-то, что я могу проверить, чтобы убедиться, что я что-то делаю неправильно?
Я не использую метод DataBind где-либо в коде, и viewstate включено для рассматриваемого вида сетки.
- EDIT -
Это оказалось ошибкой в обработке событий.
Я делал:
gvReg.Sorted += {SomeEventHandler}
Внутри события загрузки страницы, но только когда это не было обратной передачей. Эта функция называется gvReg.DataBind после сортировки сетки. Я удалил проводник обработчика и вместо этого добавил функцию обработчика события в событие OnSorted. Я полагаю, что назначенные делегаты в gridview не сохраняются в ViewState между обратными вызовами?