string selectedValue = (string)ViewState["SelectedValue"];
    // Повторно выбрать ранее выбранную строку.
    foreach (GridViewRow row in GridView1.Rows)
    {
      string keyValue = GridView1.DataKeys[row.RowIndex].Value.ToString();
      if (keyValue == selectedValue)
      {
        GridView1.SelectedIndex = row.RowIndex;
        return;
      }
    }
  }
}

Следует иметь в виду, что этот подход может быть довольно запутанным, если включено разбиение на страницы (которое будет описано ниже в разделе "Разбиение на страницы в GridView"). Это объясняется тем, что операция сортировки может переместить текущую строку на другую страницу, что сделает ее невидимой, но по-прежнему выбранной. Совершенно законная ситуация с точки зрения кода, но на практике воспринимается пользователями как сбивающая с толку.

Расширенная сортировка

Сортировка GridView достаточно проста — здесь она поддерживается по любому сортируемому столбцу в порядке возрастания. Но в некоторых приложениях пользователям предлагаются большие возможности сортировки, и они могут упорядочивать огромные результирующие наборы более сложными сортирующими выражениями.

Первое, что можно сделать на пути совершенствования сортировки в GridView — обработать событие GridView.Sorting, которое происходит непосредственно перед применением сортировки. В этот момент вы можете изменить выражение сортировки. Например, это можно использовать для реализации шаблона убывающей/возрастающей сортировки. В этом шаблоне, когда вы щелкаете на столбце первый раз. применяется сортировка по возрастанию, а после второго щелчка — сортировка по убыванию. Это подобно тому, как выполняется сортировка в проводнике Windows.

Вот код, который необходим для реализации такого подхода:

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
  // Проверить, соответствует ли текущая
  // сортировка (GridView1.SortExpression)
  // запрошенной сортировке (е.SortExpression).
  // Этот код пытается сравнить начало выражения сортировки GridView
  // Финальная часть - ASC или DESC, игнорируется.
  if (GridView1.SortExpression.StartsWith(e.SortExpression))
  {
    // Вторично применена сортировка по тому же полю.
    // Выворачиваем ее.

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

440

Hosted by uCoz