利用数据库的parentId制作分层菜单

做父系子系菜单时 想有一个方法来区别 只能给数据库打上不同的记号 如 父菜单 在parentId中 命名为0
子菜单 在parentId中 命名为其他父系菜单的id

在数据库中创建一行parentId

前台需要用到的控件有

<asp:Repeater ID="rpSystemAccessList" runat="server">
 <ItemTemplate>
  <%#Eval("AccessName").ToString()%>
</ItemTemplate>
</asp:Repeater>

  <asp:Label ID="lbTitle" runat="server" Text="权限管理"></asp:Label> - <%=RoleName%>

    <asp:Repeater ID="rpSystemAccessList" runat="server"  OnItemDataBound="rpSystemAccessList_ItemDataBound">

           <ItemTemplate>
               <tr>


                   <td>

                      
                     <%#Eval("AccessName").ToString()%>


                   </td>

               </tr>

               
                     <asp:Repeater ID="rpSystemAccessSub" runat="server">
                            <ItemTemplate>

                                <
                                <%#Eval("AccessName") %>
                                >
                                     </ItemTemplate>
                
       
              
        
                </asp:Repeater>

           </ItemTemplate>
     

      



    </asp:Repeater>

    

然后在后台写一个绑定数据的方法

  protected void BindMappingList()

格式为


//此方法为集成的方法 待会写源代码出来
        DataTable dtAccessRoleMapping = this.SystemAccessListService().GetRoleAccessList(RoleId, 0, IsPage, false);
        rpSystemAccessList.DataSource = dtAccessRoleMapping;
        rpSystemAccessList.DataBind();

第一层显示完毕

显示第二层
这第二层就有意思了

之前 GetRoleAccessList(RoleId, 0, IsPage, false) 方法的第二个参数是 指的ParentId
若parentId为0 那么它就是父系菜单 但是其Id不是0
这样 提取出 Id了以后 再一次执行方法 则会找到 parentId为 “父系菜单Id”的数 这样

这样就可以找到子菜单
现在的问题是 找到父系菜单的Id

这个方法我是没想到的

 protected void rpSystemAccessList_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                Repeater rpSystemAccessSub = (Repeater)e.Item.FindControl("rpSystemAccessSub");
                DataRowView rowv = (DataRowView)e.Item.DataItem;

                int parentId = Convert.ToInt32(rowv["Id"].ToString());
                rpSystemAccessSub.DataSource = this.SystemAccessListService().GetRoleAccessList(RoleId, parentId, IsPage, true);
                rpSystemAccessSub.DataBind();
            }
        }

做一个 Repeater 类似

扫描二维码关注公众号,回复: 10150540 查看本文章
  Repeater rpSystemAccessSub = (Repeater)e.Item.FindControl("rpSystemAccessSub");

找到父系菜单的Id


				//获取之前绑定父系菜单的数据集  
          var rowv = (DataRowView)e.Item.DataItem;
				//提取 Id
            int parentId = Convert.ToInt32(rowv["Id"].ToString());
				//绑定 
             rpSystemAccessSub.DataSource = this.SystemAccessListService().GetRoleAccessList(RoleId, parentId, IsPage, true);


             rpSystemAccessSub.DataBind();
//意外总结 xx.DataSource  = Datatable
发布了251 篇原创文章 · 获赞 42 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_38992403/article/details/103886014