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

GridView 自動產生流水號三種實作:單頁、分頁累加、後端綁定

     編輯:ASP.NET 基礎

場景需求

GridView 顯示資料列表時,常需第一欄顯示流水號(序號)。三種常見需求:

  1. 單頁內 1~N 遞增(不考慮分頁)
  2. 跨分頁累加(第 2 頁從 PageSize+1 開始)
  3. 後端程式碼控制,邏輯集中、可擴充

方式一:純前端模板欄位(單頁遞增)


<asp:TemplateField HeaderText="序號" InsertVisible="False">
  <ItemTemplate>
    <%# Container.DataItemIndex + 1 %>
  </ItemTemplate>
</asp:TemplateField>
  • Container.DataItemIndex 為當前頁內索引(0-based)。
  • 缺點:翻頁後重新從 1 開始,不適合需連續編號的報表。

方式二:前端運算式支援分頁累加


<asp:TemplateField HeaderText="序號" InsertVisible="False">
  <ItemStyle HorizontalAlign="Center" />
  <HeaderStyle HorizontalAlign="Center" />
  <ItemTemplate>
    <asp:Label ID="lblSeq" runat="server"
        Text='<%# this.GridView1.PageIndex * this.GridView1.PageSize + Container.DataItemIndex + 1 %>' />
  </ItemTemplate>
</asp:TemplateField>
  • 公式:PageIndex * PageSize + DataItemIndex + 1
  • 注意:this.GridView1 需在頁面類別中可存取(protected 或 public)。
  • 純前端,無後端程式碼,維護簡單。

方式三:RowDataBound 事件後端控制(最靈活)


<asp:BoundField HeaderText="序號" />

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        int seq = GridView1.PageIndex * GridView1.PageSize + e.Row.RowIndex + 1;
        e.Row.Cells[0].Text = seq.ToString();
    }
}
  • e.Row.RowIndex 為當前頁內索引,等同 DataItemIndex。
  • 可輕鬆擴充:條件式顯示、合併儲存格、樣式調整、多欄位組合編號(如 "A-001")。
  • 需確保 AutoGenerateColumns="False" 且 BoundField 為第一欄(Cells[0])。

比較總結

方式分頁支援程式碼位置擴充性適用場景
Container.DataItemIndex❌ 重置.aspx低簡單列表、無分頁、原型開發
前端運算式✅ 累加.aspx中標準報表、不想寫後端
RowDataBound✅ 累加.aspx.cs高複雜編號規則、條件格式、動態欄位

進階:搭配排序/篩選

若 GridView 啟用 AllowSorting 或自訂篩選,流水號應反映**目前顯示順序**,上述三種方式均自然滿足(綁定後的 DataSource 順序即顯示順序)。若需「資料庫原始 ID」不變,請直接綁定資料表主鍵欄位而非流水號。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved