今天做了一个小项目学习一下,是关于两个Repeater的嵌套使用的:
关于Repeater的嵌套,关键在于数据项的绑定。
首先,外Repeater需要设置OnItemDataBound事件,在事件中添加子Repeater的数据项绑定;
<asp:Repeater ID="Rep_Category" runat="server" OnItemDataBound="rptypelist_ItemDataBound">
<HeaderTemplate>
<table id="Tb_CompanyType">
<tr>
<%-- <td>测试</td>--%>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td class="TableFont" width="400px">
<asp:Label runat="server" ID="CompanyName" Text='<%# Eval("PrizeCategory") %>'>" ></asp:Label>
</td>
</tr>
<tr>
<td>
<div>
<asp:Repeater ID="Rep_Company" runat="server">
<ItemTemplate>
<asp:Label runat="server" Width="300px" name="name" ID="CompanyName" Text='<%# Eval("CompanyName") %>'></asp:Label>
<asp:Button ID="btn_Complainant" runat="server" Name="Complainant" Text="投诉" OnClick="Complainant_Click" />
<br />
</ItemTemplate>
</asp:Repeater>
</div>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
然后在对应的cs文件中,添加
protected void rptypelist_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
// 查找子Repeater
Repeater companyRepeater = (Repeater)e.Item.FindControl("Rep_Company");
//找到分类Repeater关联的数据项
DataRowView roww = (DataRowView) e.Item.DataItem;
//提取分类ID
string str = roww["PrizeCategory"].ToString();
// 控制管理内部Repeater的数据项
DataSet ds = new DataSet();
string companysql = "select xxxx from tb_Company where xxxx='" + str + "'";
ds = SqlHelper.ExecuteDataSet(companysql, CommandType.Text, null);
companyRepeater.DataSource = ds;
companyRepeater.DataBind();
}
}
通过这种方法可将Repeater进行嵌套。