第一步:在前台建立两个Repeater,一个嵌套在另一个Repeater里面,下面代码没什么好说的。
<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound"> <ItemTemplate> <table border="1" bordercolor="gray" style="border-collapse: collapse; "> <tr bgcolor="#c0c0c0" style="color:DimGray; font-weight:bold;"> <td width="70px" > 名称: </td> <td width="350px"> <%# Eval("project_name")%> </td> </tr> <tr> <td colspan="2"> <asp:Repeater ID="Repeater2" runat="server"> <HeaderTemplate> <table border="1" bordercolor="gray" style="border-collapse:collapse;"> <tr> <td width="68px"> 组号 </td> <td width="120px"> 组金额 </td> </tr> </table> </HeaderTemplate> <ItemTemplate> <table border="1" bordercolor="gray" style="border-collapse: collapse;"> <tr> <td width="68px"> <%# Eval("group_no")%> </td> <td width="120px"> <%# string.Format("{0:N0}", Eval("app_value_group"))%> </td> </tr> </table> </ItemTemplate> </asp:Repeater> </td> </tr> </table> <br /> </ItemTemplate> </asp:Repeater>
第二步:建立Repeater1的绑定函数。并在适当的地方引用。
private void prRepeater1([参数1][,参数2]) { //SQL语句 string sql = "XXXXX"; //数据库操作类执行SQL语句并返回dataset等 this.Repeater1.DataSource =DB.AccessAdp(sql); //绑定 this.Repeater1.DataBind(); } protected void Page_Load(object sender, EventArgs e) { //页面加载引用 this.prRepeater1([参数1][,参数2]); }
第三步:也是最关键的地方,在Repeater1的ItemDataBound事件中绑定Repeater2,代码如下:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Repeater rep = e.Item.FindControl("Repeater2") as Repeater; DataRowView rowv = (DataRowView)e.Item.DataItem; //以下是读取Repeater1中绑定数据的字段,用于Repeater2的查询条件 string strDecide_No =rowv["xxxx"].ToString(); string strVer_No = rowv["xxxx"].ToString(); //以下是Repeater2的数据读取和绑定 string sql = " XXXXXX"; //调用数据操作类执行SQL语句 rep.DataSource = DB.AccessAdp(sql); rep.DataBind(); } }
以上是实现过程,SQL语句和数据操作类没有列出来,请根据实际情况进行适当修改。