近工作用到Repeater,就做一下小结,增加哈印象,也希望对需要的你们有所帮助
repeater通常是同时读取多条数据,进行绑定,很直观
前台显示:
<asp:Repeater ID="reporders" runat="server" OnItemDataBound="reporders_ItemDataBound">
<ItemTemplate>
<div class="dingdan">
<div class="d-top">
<asp:Image ID="imgshp" runat="server" ImageUrl="img/hua.png" Width="19" Height="19" />
<asp:Label ID="shpname" runat="server" Text="店铺名"></asp:Label>
<img src="img/youjiantou.png" />
<p><%# Convert.ToInt32(Eval("orderstatus")) == 1 ? "待支付":""%></p>
</div>
<asp:Repeater ID="repitem" runat="server">
<ItemTemplate>
<div class="d-center">
<img src="<%# Eval("ImageUrl1")%>" οnerrοr='this.src="img/dingdan.png"' width="60" height="41" />
<%# Eval("ProductName")%>
</div>
</ItemTemplate>
</asp:Repeater>
<div class="d-bottom">
<p>合计:¥<%# Eval("ordertotal") %></p>
<p>共计1件商品</p>
<br />
<div class="hengfenge" style="background-color: #fff;"></div>
<asp:LinkButton ID="linkpay" runat="server" Visible="false" OnClick="linkpay_Click" CommandArgument='<%# Eval("orderid") %>'>支付</asp:LinkButton>
<asp:LinkButton ID="linkquit" runat="server" Visible="false" OnClick="linkquit_Click" CommandArgument='<%# Eval("orderid") %>'>取消</asp:LinkButton>
</div>
</div>
<div class="hengfenge" style="height: 5px;"></div>
</ItemTemplate>
<FooterTemplate><%# reporders.Items.Count==0 ? "暂无相符合数据":"" %></FooterTemplate>
</asp:Repeater>
3. 后台
protected void reporders_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rep = e.Item.FindControl("repitem") as Repeater; //找到里层的Repeater对象
DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分类Repeater关联的数据项
string typeid = rowv["id"].ToString(); //获取填充子类的id
DataSet dspro = borderitem.GetList("orderid='" + typeid + "'"); //通过查找的id在进行内Repeater的绑定
rep.DataSource = dspro ;
rep.DataBind();
}
}
注:
通过<%# Eval("字段") %> 来读取你所绑定的字段名称
在外层repeater中添加 OnItemDataBound="reporders_ItemDataBound" 就会通过这一事件进行内层repeater的绑定
在没有数据的情况下可以在<FooterTemplate>中显示没有相符数据的情况,也可添加相应的样式