Проблемы с подкачкой и сортировкой в ​​gridview asp.net - PullRequest
3 голосов
/ 09 января 2012

У меня есть вид сетки, где я реализую как пейджинг, так и сортировку. Когда я сортирую таблицу и выбираю страницу 2, сортировка теряется, и вторые 20 записей отображаются в desc, как указано в привязке к сетке

private DataSet BindGridView(string field)
        {
         DataSet ds = new DataSet()
      string userQuery = "Select tbl_User.UserID, tbl_User.FirstName from tbl_user order by tbl_user.UserID desc";
      UserTable.DataBind();
            return ds;
        }



<asp:GridView ID="UserTable" runat="server"   PageSize="20" AllowPaging="True"
                    SelectedIndex="0" DataKeyNames="UserID"  OnRowDataBound="UserTable_RowDataBound"                   
   AutoGenerateColumns="false" OnPageIndexChanging="gridView_PageIndexChanging"  AllowSorting="true" OnSorting="gridView_Sorting">

Как сохранить сортировку и выполнить подкачку, я сохраняю состояние сортировки в сеансе, как я могу использовать это для выполнения подкачки.

protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            UserTable.PageIndex = e.NewPageIndex;        
            UserTable.DataBind();
            DataView myView = new DataView(BindGridView(Session["useremail"].ToString()).Tables[0]);
        }

     protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sortExpression = null;
            if ((Session["UsersortExpression"] == null))
            {
                sortExpression = null;
            }
            else
            {
                sortExpression = (Session["UsersortExpression"].ToString());
            }
            if (sortExpression == e.SortExpression)
            {
                sortExpression += " DESC";
            }
            else
            {
                sortExpression = e.SortExpression;
            }
            DataView myView = new DataView(BindGridView(Session["useremail"].ToString()).Tables[0]);
            myView.Sort = sortExpression;
            UserTable.DataSource = myView;
            UserTable.DataBind();
            //save sort state 
            Session.Add("UsersortExpression", sortExpression);
        }

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Вы можете применить сортировку к исходному запросу, используя переменные ViewState String для хранения сортировки , поля и сортировки direction :

Убедитесь, что переменные ViewState установлены по умолчанию:

ViewState["sortDir"] = "DESC"; 
ViewState["sortField"] = "tbl_user.UserID";

Затем измените строку запроса:

string userQuery = 
"Select tbl_User.UserID, tbl_User.FirstName " +
"from tbl_user " + 
"ORDER BY " + (String)ViewState["sortField"] + " " + (String)ViewState["sortDir"];

Включить в OnSorting:

protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
    // Set new sort direction and sort field
    if ((String)ViewState["sortDir"] == "DESC"){ViewState["sortDir"] = "ASC";}
    else { ViewState["sortDir"] = "DESC"; }
    ViewState["sortField"] = e.SortExpression;

    // Rebind
    ...     
}

Таким образом, ваши исходные данные предварительно отсортированы, и вам не нужно беспокоиться об использовании myView.Sort или о каких-либо конфликтах подкачки / сортировки.

0 голосов
/ 10 января 2012

Пожалуйста, обратитесь к этой статье о поиске и сортировке в asp.net gridview.

Надеюсь, это поможет.

...