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

ASP.NET 2.0 資料教程 45(三):Repeater 自訂分頁加入排序功能

     編輯:關於ASP.NET

延續自訂分頁,加入排序支援。關鍵在於 BLL 提供同時接受 `startRowIndex`、`maximumRows`、`sortExpression` 的方法。

BLL 方法簽章

public PagedDataSource GetProductsPagedAndSorted(string sortExpression, int startRowIndex, int maximumRows)
{
    var all = GetProducts(); // 取得所有資料 (DataTable)
    all.DefaultView.Sort = sortExpression; // 排序
    var paged = new PagedDataSource { DataSource = all.DefaultView, AllowPaging = true, PageSize = maximumRows };
    paged.CurrentPageIndex = startRowIndex / maximumRows;
    return paged;
}

ObjectDataSource 設定

<asp:ObjectDataSource ID="ProductsDS" runat="server" TypeName="ProductsBLL"
    SelectMethod="GetProductsPagedAndSorted" OnSelecting="ProductsDS_Selecting">
    <SelectParameters>
        <asp:Parameter Name="sortExpression" Type="String" />
        <asp:Parameter Name="startRowIndex" Type="Int32" />
        <asp:Parameter Name="maximumRows" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

頁面屬性保存排序狀態

private string SortExpression
{
    get { return ViewState["SortExpr"] as string ?? "ProductName"; }
    set { ViewState["SortExpr"] = value; }
}

Selecting 事件注入排序參數

protected void ProductsDS_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
    e.InputParameters["sortExpression"] = SortExpression;
}

排序 UI 介面

在 Repeater `HeaderTemplate` 或外部放置 `LinkButton`,`CommandName="Sort"`、`CommandArgument="欄位名"`,於 `Click` 事件更新 `SortExpression` 並重新繫結:

protected void lnkSort_Click(object sender, EventArgs e)
{
    var lnk = (LinkButton)sender;
    string newSort = lnk.CommandArgument;
    // 切換 ASC/DESC
    if (SortExpression == newSort) SortExpression = newSort + " DESC";
    else if (SortExpression == newSort + " DESC") SortExpression = newSort;
    else SortExpression = newSort;
    // 重設分頁到第一頁
    // (需配合自訂分頁 UI 重設 startRowIndex)
    rptProducts.DataBind();
}

完整運作流程

  1. 使用者點擊排序連結 → 更新 `SortExpression` ViewState。
  2. Repeater `DataBind` 觸發 `ObjectDataSource.Selecting`。
  3. 注入 `sortExpression` 參數 → BLL 執行排序後分頁。
  4. 回傳 `PagedDataSource` → Repeater 渲染當頁資料。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved