Как правильно использовать переменные сеанса для разбиения на страницы и сортировки GridView? - PullRequest
0 голосов
/ 13 июля 2011

У меня есть страница ASP .NET с несколькими GridView элементами управления, для которых я реализую сортировку и разбиение на страницы.

Я использую переменные сеанса для поддержки DataTable, представляющего данную страницу данных GridView в ViewState, например:

protected void gv_Sorting(object sender, GridViewSortEventArgs e)
{
      // Session["Page"] represents the active page of the GridView 
      // when the Sorting event fires.
      DataTable dt = Session["Page"] as DataTable;

      if (dt != null)
      {       
           if (ViewState["SortDirection"] == null)
           {
                ViewState["SortDirection"] = "DESC";
           }

           string ViewState_SortDirection = ViewState["SortDirection"].ToString();

           for (int i = 0; i <= ((GridView)sender).Columns.Count - 1; i++)
           {
                if (e.SortExpression == ((GridView)sender).Columns[i].SortExpression)
                {
                     if (ViewState["SortDirection"].ToString() == "ASC")
                     {
                          e.SortDirection = SortDirection.Descending;
                          ((GridView)sender).Columns[i].HeaderText = ((GridView)sender).Columns[i].HeaderText + " ▼";
                          ViewState["SortDirection"] = "DESC";
                     }
                     else if (ViewState["SortDirection"].ToString() == "DESC")
                     {
                          e.SortDirection = SortDirection.Ascending;
                          ((GridView)sender).Columns[i].HeaderText = ((GridView)sender).Columns[i].HeaderText + " ▲";
                          ViewState["SortDirection"] = "ASC";
                     }
                }
           }

           DataView dv = new DataView(dt)
           {
                Sort = e.SortExpression + " " + ViewState["SortDirection"]
           };

           gv.DataSource = dv;
           gv.DataBind();

           Session["Page"] = dv.ToTable();
           DataTable dt = Session["Page"] as DataTable;
      }
 }

Я бы хотел, чтобы каждый GridView использовал один и тот же Сортировка обработчик событий. Когда используются переменные сеанса в сумке состояний, такие как Session ["Page"] , является ли эта переменная сеанса специфичной для GridView, чье событие Sorting срабатывает? Или его можно изменить другими элементами управления GridView, используя его для сортировки на той же странице? То есть, если у меня есть другой GridView, который также использует Session ["Page"] для подкачки страниц, будет ли эта переменная сеанса находиться в области видимости этого элемента управления?

Или я должен просто следовать указаниям ответа этого поста и передавать только SortDirection для каждой сессии?

1 Ответ

3 голосов
/ 13 июля 2011

Вот доступные типы переменных, сохраняющих данные, и их области действия:

  • Переменные приложения (общие для всех пользовательских сеансов, для всего приложения)
  • Переменные сеанса (общие длявсе страницы, для всего сеанса пользователя)
  • Переменные ViewState (существует только на странице, для всей страницы)
  • Переменные ControlState (существует только на странице, только для элемента управления)

Если вы храните данные своей сетки в качестве переменных сеанса, у вас возникнут проблемы при использовании двух сеток на одной странице.Я не могу дать каких-либо конкретных предложений о том, как хранить данные, не зная больше о системе, но приведенные выше типы переменных могут указать вам верное направление

...