首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 翻頁後繼續維持排序

     編輯:關於ASP.NET

ViewState 記錄排序運算式與方向:分頁不中斷排序狀態

需求

資料 15 筆,每頁 10 筆。排序時:第一頁對前 10 筆排序,翻第二頁時對後 5 筆**單獨**排序(而非重查資料庫全量排序)。

設計要點

  1. 大量資料**勿**將 DataSet 存入 ViewState,影響效能。
  2. ViewState 僅存 SortExpression 與 SortDirection(升冪/降冪)。

實作範例:SortCommand 事件

private void grdProjTrace_SortCommand(object source, DataGridSortCommandEventArgs e)
{
    this.grdProjTrace.CurrentPageIndex = 0; // 排序重置第一頁
    DataView dv = GetDataView(); // 取得資料視圖
    string sortExpr = ViewState["SortExpression"] as string;
    string sortDir = ViewState["SortDirection"] as string; // "ASC" or "DESC"

    if (e.SortExpression == sortExpr)
        sortDir = (sortDir == "ASC") ? "DESC" : "ASC"; // 同欄位切換方向
    else
        sortDir = "ASC"; // 新欄位預設升冪

    dv.Sort = e.SortExpression + " " + sortDir;
    ViewState["SortExpression"] = e.SortExpression;
    ViewState["SortDirection"] = sortDir;

    this.grdProjTrace.DataSource = dv;
    this.grdProjTrace.DataBind();
}

PageIndexChanged 事件

private void grdProjTrace_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
    this.grdProjTrace.CurrentPageIndex = e.NewPageIndex;
    DataView dv = GetDataView();
    string sortExpr = ViewState["SortExpression"] as string;
    string sortDir = ViewState["SortDirection"] as string;
    if (!string.IsNullOrEmpty(sortExpr))
        dv.Sort = sortExpr + " " + sortDir; // 套用相同排序
    this.grdProjTrace.DataSource = dv;
    this.grdProjTrace.DataBind();
}

優化建議

  • 資料量大時改用資料庫端排序(ORDER BY),ViewState 僅記錄參數傳給 SQL。
  • 使用 GridView (2.0+) 內建 SortExpression/SortDirection 屬性簡化代碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved