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

ASP.NET 資料繫結控件精通 (三):Repeater 控件靈活呈現資料的藝術

     編輯:關於ASP.NET

Repeater 控件特色

輕量級、無預設版面的資料繫結控件。不像 GridView/DataList 有內建表格結構,**完全由開發者透過模板定義 HTML 輸出**,極度彈性,適合產生清單、導航選單、卡片式版面等非表格結構。

支援的模板

模板用途備註
HeaderTemplate資料前輸出一次 (如 <table>、<ul> 開頭)可選
ItemTemplate每筆資料輸出 (主要模板)必要
AlternatingItemTemplate隔行資料輸出 (斑馬紋)可選,無則沿用 ItemTemplate
SeparatorTemplate項目間分隔 (如 <hr>、<li> 分隔)可選
FooterTemplate資料後輸出一次 (閉合標籤)可選

實戰範例:以 Table 呈現使用者清單

前台標記

<asp:Repeater ID="Repeater1" runat="server">
  <HeaderTemplate>
    <table border="1" cellpadding="0" cellspacing="0">
    <tr><th>編號</th><th>真實姓名</th><th>年齡</th><th>性別</th><th>手機</th><th>電話</th><th>電子郵件</th></tr>
  </HeaderTemplate>
  <ItemTemplate>
    <tr>
      <td><%# Eval("UserID") %></td>
      <td><%# Eval("RealName") %></td>
      <td><%# Eval("Age") %></td>
      <td><%# (bool)Eval("Sex") ? "男" : "<font color='green'>女</font>" %></td>
      <td><%# Eval("Mobile") %></td>
      <td><%# Eval("Phone") %></td>
      <td><%# Eval("Email") %></td>
    </tr>
  </ItemTemplate>
  <AlternatingItemTemplate>
    <tr style="background:#f0f0f0">
      <td><%# Eval("UserID") %></td>
      <td><%# Eval("RealName") %></td>
      <td><%# Eval("Age") %></td>
      <td><%# (bool)Eval("Sex") ? "男" : "<font color='green'>女</font>" %></td>
      <td><%# Eval("Mobile") %></td>
      <td><%# Eval("Phone") %></td>
      <td><%# Eval("Email") %></td>
    </tr>
  </AlternatingItemTemplate>
  <FooterTemplate>
    </table>
  </FooterTemplate>
</asp:Repeater>

後台繫結

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Repeater1.DataSource = UserService.GetAll();
        Repeater1.DataBind();
    }
}

進階技巧

  1. 條件式輸出:模板內使用 `<%# ... %>` 內嵌運算式,可呼叫後台 `protected` 方法處理複雜邏輯。
    <td><%# FormatRole(Eval("RoleId")) %></td>
  2. 巢狀 Repeater**呈現主從資料**:
    <asp:Repeater ID="rptCategory" runat="server">
        <ItemTemplate>
          <h3><%# Eval("CategoryName") %></h3>
          <asp:Repeater ID="rptProduct" runat="server"
              DataSource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("CategoryProduct") %>'>
            <ItemTemplate><div><%# Eval("ProductName") %></div></ItemTemplate>
          </asp:Repeater>
        </ItemTemplate>
      </asp:Repeater>
  3. ItemDataBound 事件微調**:在繫結每筆資料時動態修改控件屬性、隱藏特定欄位。
  4. 無資料時顯示訊息**:檢查 `Repeater1.Items.Count == 0` 於 FooterTemplate 或外層顯示提示。

Repeater vs GridView vs DataList

特性RepeaterDataListGridView
HTML 控制權完全自訂表格/流式版面完整表格
內建分頁/排序無無有
編輯/刪除 UI無有 (EditItemTemplate)有 (CommandField)
ViewState 大小最小中最大
效能最佳良較重

總結

Repeater 是「輕量、極致彈性」的資料呈現利器。雖缺乏內建編輯/分頁功能,但配合模板、巢狀繫結與 ItemDataBound 事件,能實作任何自訂版面需求。追求效能、精確控制 HTML 輸出、非表格式資料呈現時,Repeater 是首選。

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