2016-04-13 7 views
0

ページ間を移動するときにソートに問題があります。私が新しいページに行くと、並べ替え順序が失われ、ユーザーは再び並べ替える必要があります。C#新しいページに行くときにソートが失われる

私は自分のコードを実行し、問題がPageIndexChangingのgridviewのイベントにあることを知っています。新鮮なデータでグリッドビューを再バインドします。

しかし、これを避ける方法はわかりません。グリッドビューの再バインド時にソート順を保存するにはどうすればよいですか?おそらくViewState?

お願いします。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
    PopulateProductClass(); 
    PopulateProduct(); 
    PopulateOrderList(); 
    }   
} 

private void PopulateOrderList() 
{ 
    DateTime d; 
    DateTime d2; 

    CustomerInfo ki = CustomerInfoProvider.GetCustomerInfoByUserID(CooneenHelper.GetUserImpersonisationID()); 
    int nKustomerID = ki.CustomerID; 
    DataTable dts = new DataTable(); 
    dts.Columns.Add("OrderDate", typeof(DateTime)); 
    dts.Columns.Add("OrderNumber", typeof(string)); 
    dts.Columns.Add("OrderItemSKUName", typeof(string)); 
    dts.Columns.Add("SKUNumber", typeof(string)); 
    dts.Columns.Add("OrderItemStatus", typeof(string)); 
    dts.Columns.Add("OrderItemUnitCount", typeof(string)); 
    dts.Columns.Add("mtrx_Code2", typeof(string)); 

    QueryDataParameters qdp = new QueryDataParameters(); 
    qdp.Add("@CustomerID", nKustomerID); 

    if (drpProductClass.SelectedValue.ToString() != "0" || drpProductClass.SelectedValue.ToString() == null) { qdp.Add("@OrderItemWRClass", drpProductClass.SelectedItem.ToString()); } 
    if (drpProduct.SelectedValue.ToString() != "0") { qdp.Add("@OrderItemSKUID", drpProduct.SelectedValue.ToString()); }     
    if (txtStartDate.Text != "") { d = DateTime.Parse(txtStartDate.Text); qdp.Add("@OrderItemDateFrom", d.ToString("yyyy-MM-dd")); } 
    if (txtEndDate.Text != "") { d2 = DateTime.Parse(txtEndDate.Text); qdp.Add("@OrderItemDateTo", d2.ToString("yyyy-MM-dd")); } 

    DataSet ds = gc.ExecuteQuery("CN_GetOrderItemByCustID", qdp, QueryTypeEnum.StoredProcedure, true); 
    foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
    DataRow drNew = dts.NewRow(); 
    drNew["OrderDate"] = ValidationHelper.GetDateTime(dr["OrderDate"], DateTime.Now).ToShortDateString(); 
    drNew["OrderNumber"] = dr["OrderNumber"].ToString(); 
    drNew["OrderItemSKUName"] = dr["OrderItemSKUName"].ToString(); 
    drNew["SKUNumber"] = dr["SKUNumber"].ToString(); 
    drNew["OrderItemStatus"] = dr["OrderItemStatus"].ToString(); 
    drNew["OrderItemUnitCount"] = dr["OrderItemUnitCount"].ToString(); 
    drNew["mtrx_Code2"] = dr["mtrx_Code2"].ToString(); 
    dts.Rows.Add(drNew); 
    } 
    //Clear the TextBox 
    litResults.Text = String.Empty; 
    if (dts.Rows.Count == 1) 
    litResults.Text = "" + dts.Rows.Count.ToString() + " Order Items"; 
    else 
    litResults.Text = "" + dts.Rows.Count.ToString() + " Order Items";  
    try 
    { 
    Session["Data"] = dts; 
    } 
    catch(Exception ex) 
    { 
    throw ex; 
    } 
    gvOrderItems.Visible = true; 
    gvOrderItems.DataSource = dts.DefaultView;  
    gvOrderItems.DataBind();  
    if (dts.Rows.Count > 1) litResults.Text += " - Showing page " + (gvOrderItems.PageIndex + 1).ToString() + " of " + gvOrderItems.PageCount.ToString(); 
} 

private string SortCriteria 
{ 
    get 
    { 
    if (ViewState["sortCriteria"] == null) 
    { 
     ViewState["sortCriteria"] = ""; 
    } 

    return ViewState["sortCriteria"].ToString(); 
    } 
    set 
    { 
    ViewState["sortCriteria"] = value; 
    } 
} 

public SortDirection SortDirection 
{ 
    get 
    { 
    if (ViewState["SortDirection"] == null) 
    { 
     ViewState["SortDirection"] = SortDirection.Ascending;   
    } 
    return (SortDirection)ViewState["SortDirection"]; 
    } 
    set 
    { 
    ViewState["SortDirection"] = value; 
    } 
} 

protected void gvOrderItems_Sorting(object sender, GridViewSortEventArgs e) 
{ 
    string sortExpression = e.SortExpression; 
    string direction = string.Empty; 

    DataTable dt = (DataTable)Session["Data"]; 

    if (dt.Rows.Count > 0) 
    {   
    DataView dataView = new DataView(dt); 

    if (SortDirection == SortDirection.Ascending) 
    { 
     SortDirection = SortDirection.Descending;   
     direction = " DESC"; 
    } 
    else 
    { 
     SortDirection = SortDirection.Ascending; 
     direction = " ASC"; 
    } 
    dataView.Sort = sortExpression + direction; 
    gvOrderItems.DataSource = dataView; 
    gvOrderItems.DataBind();   
    } 
} 

protected void gvOrderItems_PageIndexChanging1(object sender, GridViewPageEventArgs e) 
{ 
    gvOrderItems.PageIndex = e.NewPageIndex; 
    PopulateOrderList(); 
} 

答えて

0

多分、あなたは、Page_LoadからのすべてのポストバックでGridViewをデータバインドしていますか?

これは最初に行う必要があります。 Page.IsPostBackプロパティを使用します。

protected void Page_Load(object sender, System.EventArgs e) 
{ 
    if(!Page.IsPostBack) 
     // GridBind here 
} 
+0

こんにちはVignesh私はそれを試しましたが、私は次のページに移動するとまだソートを失います – Kevin

+1

完全なコードを投稿してください。あなたは 'ViewState'を使用し、これをチェックする必要があります[解決策](http://stackoverflow.com/a/12167332/2118383)@Kevin –

+0

こんにちはVigneshフルコードがアップロードされました。上記を参照してください – Kevin

0

は、ViewStateのを使用しての示唆にビネーシュに私の問題のおかげで解決しました。しかし、私はSession変数を使用することを選択します。

並べ替えイベントハンドラの内部では、並べ替えが実行された後、並べ替えられたリストがセッションSession["SortedView"] = dataView;に保存されました。今度はPageIndexChanging1の間、私はこのセッション変数が空であるかどうかチェックし、それに応じて使用します。

関連する問題