Ниже показан полный код обработчика события RowCreated, реализующего упомянутые правила:

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    // Получить значение титула вежливого обращения
    // для создаваемого элемента.
    string title = (string)DataBinder.Eval(e.Row.DataItem, "TitleOfCourtesy");
    // Если титул - "Ms.", "Mrs.", или "Mr.",
    // изменить цвета элемента.
    if (title == "Ms." || title == "Mrs.")
    {
      e.Row.BackColor = System.Drawing.Color.LightPink;
      e.Row.ForeColor = System.Drawing.Color.Maroon;
    }
    else if (title == "Mr.")
    {
      e.Row.BackColor = System.Drawing.Color.LightCyan;
      e.Row.ForeColor = System.Drawing.Color.DarkBlue;
    }
  }
}

Во-первых, код проверяет, что создаваемый элемент — обычный, а не дополнительный. Если ни то, ни другое, это значит, что данный элемент — какой-то другой интерфейсный элемент вроде номера страницы, нижнего колонтитула или заголовка, и в этом случае делать ничего не нужно. Если же это — нормальный элемент, код извлекает значение поля TitleOfCourtesy из элемента привязанных данных и сравнивает его с жестко закодированными строчными значениями. На рис. 10.4 показана результирующая страница.

Совет. В этом примере используется метод DataBinder.Eval() для извлечения части информации из элемента данных, используя рефлексию. Альтернативно вы могли бы привести e.Row.DataItem к корректному типу (такому как EmployeeDetails для ObjectDataSource), DataRowView (для SqlDataSource в режиме DataSet) или DbDataRecord (для SqlDataSource в режиме DataReader). Тем не менее, подход DataBinder.Eval() работает во всех этих сценариях (ценой некоторого замедления).

Это не самый полезный пример использования события RowCreated, однако он демонстрирует, как можно обработать событие и прочесть важную информацию об элементе. Вы можете применять гораздо более впечатляющее форматирование для изменения представления страничных ссылок, добавления новых кнопок, отображения значений, которые хотите выделить специальными шрифтами и цветом, создания итоговых и промежуточных строк и многого другого.

предыдущая    следующая страница   оглавление

430

Hosted by uCoz