Repeater中的数据绑定
Repeater基础
在aspx文件中加入Repeater 控件,在<ItemTemplate></ItemTemplate>包含的范围里加入自己控制的代码,需要替换的变量使用<%# Eval("SellerName")%>;注意两侧的引号。
.aspx:
2 3 4 5 6 7 | <asp:Repeater ID= "SellerRpt" runat= "server" > <ItemTemplate> <li><a href= '<%# Eval("SellerName")%>' target= "_blank" > <%# Eval( "ComName" )%></a></li> </ItemTemplate> </asp:Repeater> |
对应的后台cs中,在页面加载处加入数据绑定的代码:
2 3 4 5 6 7 8 9 10 | 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:
2 3 4 5 6 7 8 | <asp:Repeater ID= "topAdHintRpt" runat= "server" > <ItemTemplate> <asp:Label ID= "BarLabel" CssClass= "bar" runat= "server" Text= "|" ></asp:Label> <a href= "#" ><span> <%#Container.DataItem%></span></a> </ItemTemplate> </asp:Repeater> |
.cs:
2 3 4 5 | ArrayList alterText; AdDA.GetIndexTopList( out alterText); topAdHintRpt.DataSource = alterText; topAdHintRpt.DataBind(); |
处理后显示
某些情况下,数据库中检索出来的数据并不适合直接显示出来,想要适当处理后显示(eg:日期的格式,字符串长度的控制),可使用标签来占位,在onitemdatabound函数中自行控制:
.aspx:
2 3 4 5 6 | <asp:Repeater ID= "Repeater1" runat= "server" OnItemDataBound= "ProRpt_ItemDataBound" > <ItemTemplate> <asp:Label ID= "colinDate" runat= "server" Text= "" ></asp:Label> </ItemTemplate> </asp:Repeater> |
.cs:
2 3 4 5 6 7 8 9 10 11 | 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:
2 3 4 5 6 7 8 9 10 11 12 13 | <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:
2 3 4 5 6 7 8 9 10 11 12 13 14 | 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(); } } |
Over!
More:http://blog.donews.com/me1105/archive/2011/04/09/143.aspx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述