.net 双层repeater嵌套 实现树形结构

效果:

.net 双层repeater嵌套 实现树形结构


(1)前台代码:

样式:

<style type="text/css">
        .close, .open {
         background:url(/base/css/easyui/gray/images/tree_icons.png);
        }
        .close {
            float: left;
            width: 16px;
            height: 16px;
            background-position:-96px 0px;
             cursor:pointer;
        }
         .open {
             display:none;
            float: left;
            width: 16px;
            height: 16px;
            background-position:-113px 0px;
            cursor:pointer;
        }
        .close01 {
            float: left;
            width: 16px;
            height: 16px;
        }
    </style>


 <asp:Repeater ID="rptData" runat="server" OnItemCommand="rptData_ItemCommand"
                    OnItemDataBound="rptData_ItemDataBound">

                    <HeaderTemplate>
                        <table cellpadding="0" cellspacing="0" id="dg" class="table table-bordered table-striped with-check table-condensed table-hover">
                            <thead>
                                <tr>
                                    <th>
                                        <input id="CheckAll" title="点击全选或反全选当前页所有信息" tabindex="0" type="checkbox">
                                    </th>
                                    <th>序号
                                    </th>
 
                                    <th>菜单名称
                                    </th>

                                    <th>操作
                                    </th>
                                </tr>
                            </thead>
                    </HeaderTemplate>
                    <ItemTemplate>

                        <tr>
                            <td style="text-align: center">
                                <input id="chkId" name="chkname" title="选择/取消" type="checkbox" value="<%# DataBinder.Eval(Container.DataItem, "Id")%>" />
                            </td>
                            <td style="text-align: left">
                                <%# DataBinder.Eval(Container.DataItem, "Id")%>
                            </td>  
                            <td style="text-align: left">
                                <div class='close close_<%# DataBinder.Eval(Container.DataItem, "Id")%>' id='<%# DataBinder.Eval(Container.DataItem, "Id")%>'></div>
                                 <div class='open open_<%# DataBinder.Eval(Container.DataItem, "Id")%>' id='<%# DataBinder.Eval(Container.DataItem, "Id")%>'></div>

                                <%# DataBinder.Eval(Container.DataItem, "MenuName")%>
                            </td>                        
                            <td>
                                <a href="Update.aspx?Id=<%# DataBinder.Eval(Container.DataItem,"ID")%>" class="btn btn-default btn-mini">
                                    <i class="icon-pencil icon-black"></i>编辑</a>
                                <asp:LinkButton ID="lbDelete" runat="server" CssClass="btn btn-default btn-mini"
                                    CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Id") %>' OnClientClick="javascript:return confirm('确定要删除该项吗?')"
                                    CommandName="Delete"><i class="icon-remove icon-black"></i> 删除 </asp:LinkButton>
                            </td>
                        </tr>
                        <asp:Repeater runat="server" ID="repData01">
                            <ItemTemplate>

                                <tr id='tr_<%# DataBinder.Eval(Container.DataItem, "parentId")%>' style="display:none;">
                                    <td style="text-align: center">
                                        <input id="chkId" name="chkname" title="选择/取消" type="checkbox" value="<%# DataBinder.Eval(Container.DataItem, "Id")%>" />
                                    </td>
                                     <td style="text-align: left"  colspan="2">
                                      <%# DataBinder.Eval(Container.DataItem, "Id")%>
                                    </td>
                                    <td>
                                        <div class="close01"  style="margin-left:15px;"></div>
                                        <div><%# DataBinder.Eval(Container.DataItem, "MenuName")%></div>
                                    </td>                                  
                                    <td>
                                        <a href="Update.aspx?Id=<%# DataBinder.Eval(Container.DataItem,"ID")%>" class="btn btn-default btn-mini">
                                            <i class="icon-pencil icon-black"></i>编辑</a>
                                        <asp:LinkButton ID="lbDelete" runat="server" CssClass="btn btn-default btn-mini"
                                            CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Id") %>' OnClientClick="javascript:return confirm('确定要删除该项吗?')"
                                            CommandName="Delete"><i class="icon-remove icon-black"></i> 删除 </asp:LinkButton>
                                    </td>
                                </tr>
                            </ItemTemplate>
                        </asp:Repeater>
                    </ItemTemplate>
                    <FooterTemplate>
                        </table>
                    </FooterTemplate>
                </asp:Repeater>

(2)后台代码:

 protected void rptData_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Repeater rep = e.Item.FindControl("repData01") as Repeater;
            DataRowView rowv = (DataRowView)e.Item.DataItem;
            int Id = Convert.ToInt32(rowv["Id"]);
            string where = string.Format(" and ParentId ={0} ", Id);
            DataSet ds = bll.GetMenuList(where);
            if (ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
            {
                rep.DataSource = ds.Tables[0];
                rep.DataBind();
            }
        }
    }

(3)js代码:

 <script type="text/javascript">
            $(function () {
                $(".close").click(function () {
                    var id = $(this).attr("id");
                    $(this).hide();
                    $(".open_" + id).show();
                    $("#dg #tr_" + id).show();
                });
                $(".open").on("click",function () {
                    $(this).hide();
                    var id = $(this).attr("id");
                    $(".close_" + id).show();
                    $("#dg #tr_" + id).hide();
                });
            });

        </script>