做父系子系菜单时 想有一个方法来区别 只能给数据库打上不同的记号 如 父菜单 在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