Datalist和Repeater嵌套

来源:互联网 发布:java约瑟夫环不用链表 编辑:程序博客网 时间:2024/06/03 15:56

 最近在做的一个网站多次使用到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();
    }

原创粉丝点击