最近在做的一个网站多次使用到Datalist或Repeater嵌套,觉得挺有用的。
例如网站有大栏目,大栏目下有小栏目,小栏目中有新闻什么的,像这样的树型结构,就适合用嵌套绑定数据,特别是
要求小栏目可以增加删除修改。
还有就是那种多对多的关系,例如管理员与栏目的关系,一个管理员可以管理多个栏目,一个栏目又可以有多个管理员
来管理,查看权限时如果要求按栏目查看和按管理员查看,也可以用嵌套绑定数据来解决,而不用去写复杂的存储过程可sql语句,或者读出权限,管理员,栏目后再进行处理。查看权限,例如按栏目查看时,数据也是树型的,一个栏目下对就多个管理员。
可以Datalist中嵌套Datalist,Datalist中嵌套Repeater,Repeater中嵌套Datalist,Repeater中嵌套Repeater,都
差不多。主要是在DataSet要返回两个表,再添加两个表的关系。前台绑定时主要要用转义和加方括号。还有和后台关系的名称一样。还是看代码吧。
前台***.aspx
<asp:Repeater ID="Repeater1" runat="server" >
<ItemTemplate>
<p><%# DataBinder.Eval(Container.DataItem, "sname") %></p>
<asp:Repeater ID="Repeater2" runat="server"
DataSource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>'>
<ItemTemplate>
<%--注意是"[/"id/"]",而不是"id",要用转义和加方括号--%>
<a href="Detail.aspx?ID=<%# DataBinder.Eval(Container.DataItem, "[/"id/"]") %>">
<%# DataBinder.Eval(Container.DataItem, "[/"title/"]") %>
</a>
<%# DataBinder.Eval(Container.DataItem, "[/"addtime/"]") %>
<br />
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
后台***.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
//DataSet中关系的名称,前台绑定要用到
string relationname = "myrelation";
//读取数据,返回两个表,存储过程中至少要有两个查询
DataSet ds = GetData();
//添加关系
ds.Relations.Add(relationname, ds.Tables[0].Columns["mid"], ds.Tables[2].Columns["mid"]);
Repeater1.DataSource = ds.Tables[0];
Repeater1.DataBind();
}