首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ASP.NET Repeater 每 N 行插入分隔線:使用計數器與內聯表達式

     編輯:程式設計綜合問答

方案一:內聯表達式 (最簡潔)

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <%# Eval("ColumnName") %><br />
        <%# (Container.ItemIndex + 1) % 5 == 0 ? "<hr />" : "" %>
    </ItemTemplate>
</asp:Repeater>

Container.ItemIndex 從 0 開始,每 5 行 (索引 4,9,14...) 輸出 <hr />。

方案二:後端代碼動態插入 (DataTable 層面)

protected void Page_Load(object sender, EventArgs e) {
    DataTable dt = GetData();
    // 每 5 行插入一行特殊標記
    for (int i = 5; i < dt.Rows.Count; i += 6) { // 索引偏移因插入行
        DataRow sep = dt.NewRow();
        sep["ColumnName"] = "___SEPARATOR___"; // 特殊值
        dt.Rows.InsertAt(sep, i);
    }
    Repeater1.DataSource = dt;
    Repeater1.DataBind();
}

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) {
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
        DataRowView drv = (DataRowView)e.Item.DataItem;
        if (drv["ColumnName"].ToString() == "___SEPARATOR___") {
            ((Literal)e.Item.FindControl("litSeparator")).Visible = true;
        }
    }
}

方案三:OnItemDataBound 直接輸出

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) {
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
        if ((e.Item.ItemIndex + 1) % 5 == 0) {
            Literal lit = new Literal();
            lit.Text = "<hr />";
            e.Item.Controls.Add(lit);
        }
    }
}

推薦

**方案一** 無需後端邏輯,前端模板自包含,維護最簡單。

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