常用两级分类中会用到嵌套绑定,这里用一个函数来返回DataSet,在外层控件的ItemDataBound事件中来
绑定内存控件,唯一要注意的是FindControl的用法。
aspx:
<asp:repeater id="Repeater1" runat="server">
<ItemTemplate>
<div>
<%#DataBinder.Eval(Container.DataItem,"powername")%>
<br>
<asp:Repeater id="Repeater2" runat="server">
<ItemTemplate>
<a href='Shopping.aspx?CategoryID=<%#DataBinder.Eval(Container.DataItem,"id")%>'>
<%#DataBinder.Eval(Container.DataItem,"powername")%>
</a>
</ItemTemplate>
</asp:Repeater>
</div>
</ItemTemplate>
</asp:repeater>
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(Request["ParentID"]!=null&&Request["ParentID"]!="")
ParentID=Request["ParentID"];
if(!this.IsPostBack)
{
SqlConnection con=new SqlConnection
(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
SqlDataAdapter cmd=new SqlDataAdapter("select id,powername from productsort where pub=1
order by orderid desc",con);
DataSet ds=new DataSet();
cmd.Fill(ds);
Repeater1.DataSource=ds;
Repeater1.DataBind();
}
}
private DataSet BindRep2(int Pid)
{
SqlConnection con=new SqlConnection
(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
SqlDataAdapter cmd=new SqlDataAdapter("select id,powername from productsort where
parentid="+Pid.ToString()+" order by orderid desc",con);
DataSet ds=new DataSet();
cmd.Fill(ds);
return ds;
}
private void Repeater1_ItemDataBound(object sender,
System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
ListItemType.AlternatingItem)
{
Repeater Repeater2 = (Repeater) e.Item.FindControl("Repeater2");
//找到分类Repeater1关联的数据项
DataRowView rowv = (DataRowView)e.Item.DataItem;
int ParentID = Convert.ToInt32(rowv["ID"]);
//提取分类ID
Repeater2.DataSource = BindRep2(ParentID);
Repeater2.DataBind();
//根据分类ID查询该分类下的产品,并绑定产品Repeater2
}
}