我們先講講Repeater基礎。我們可以在aspx文件中融入Repeater 控件,也可以在<ItemTemplate></ItemTemplate>包含的范圍融入自己的代碼,當然這里也要使用到變量<%# Eval("SellerName")%>;注意兩側的引號。
.aspx:
<asp:Repeater ID="SellerRpt" runat="server"> <ItemTemplate> <li><a href='<%# Eval("SellerName")%>' target="_blank"> <%# Eval("ComName")%></a></li> </ItemTemplate> </asp:Repeater>
和后臺cs中相對照,在頁面加載處加入數據綁定的代碼:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataTable dt = SellerDA.GetTopHotSellers(9); SellerRpt.DataSource = dt; SellerRpt.DataBind(); } }
aspx中"SellerName"、"ComName"為DataTable 中的列名。
優化
當讓我們也能夠用DataItem可減少Eval函數的執行步驟,優化頁面解析時間:
<%# ((DataRowView)Container.DataItem)["SellerName"]%>替換<%# Eval("SellerName")%>
ArrayList數據源
如果數據源是ArrayList,并且ArrayList為一列string數組,則可不用寫出列名:
.aspx:
<asp:Repeater ID="topAdHintRpt" runat="server"> <ItemTemplate> <asp:Label ID="BarLabel" CssClass="bar" runat="server" Text="|"></asp:Label> <a href="#" rel="external nofollow" ><span> <%#Container.DataItem%></span></a> </ItemTemplate> </asp:Repeater>
.cs:
ArrayList alterText; AdDA.GetIndexTopList(out alterText); topAdHintRpt.DataSource = alterText; topAdHintRpt.DataBind();
處理后顯示
現在我們要說的就是在特定情況下,數據庫中檢索出來的數據并不適合直接顯示出來,想要適當處理后顯示(eg:日期的格式,字符串長度的控制),可使用標簽來占位,在onitemdatabound函數中自行控制:
.aspx:
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="ProRpt_ItemDataBound"> <ItemTemplate> <asp:Label ID="colinDate" runat="server" Text=""></asp:Label> </ItemTemplate> </asp:Repeater>
.cs:
protected void ProRpt_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分類Repeater關聯的數據項 string strDate = rowv["clDate"].ToString(); Label DateLB = e.Item.FindControl("colinDate") as Label; DateLB.Text = strDate.Substring(0, 10); } }
嵌套Reapeter的顯示
對于某些復雜的顯示邏輯,需用用到Reapeter的嵌套,這里需要自行控制2層數據源的數據綁定:
.aspx:
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="ProRpt_ItemDataBound"> <ItemTemplate> <asp:Repeater ID="ParaRpt" runat="server" OnItemDataBound="ParaRpt_ItemDataBound"> <ItemTemplate> <asp:Label ID="bar" CssClass="bar" runat="server" Text="|"></asp:Label> <span class="para"> <%# Eval("Name")%>: <%# Eval("Value")%></span> </ItemTemplate> </asp:Repeater> </ItemTemplate> </asp:Repeater>
.cs:
protected void ProRpt_ItemDataBound(object sender, RepeaterItemEventArgs e) { //判斷里層repeater處于外層repeater的哪個位置( AlternatingItemTemplate,FooterTemplate, //HeaderTemplate,,ItemTemplate,SeparatorTemplate if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Repeater rep = e.Item.FindControl("ParaRpt") as Repeater;//找到里層的repeater對象 DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分類Repeater關聯的數據項 string str = Convert.ToString(rowv["Pro_Content"]); //獲取填充子類的內容 rep.DataSource = Product.FillPara(str); rep.DataBind(); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/128202.html
閱讀 561·2023-03-27 18:33
閱讀 750·2023-03-26 17:27
閱讀 647·2023-03-26 17:14
閱讀 603·2023-03-17 21:13
閱讀 537·2023-03-17 08:28
閱讀 1823·2023-02-27 22:32
閱讀 1315·2023-02-27 22:27
閱讀 2199·2023-01-20 08:28