ASP.NET菜单用户控件:.NET无限级扩展菜单用户控件实现(2)
MenuInfoAccess.cs文件
using System;
using System.Collections.Generic;
using System.Text;
using Entity;
using System.Data;
namespace DAL
{
public class MenuInfoAccess
{
public static IEnumerable<MenuInfo> GetMenuTree()
{
string strSql = "select * from Menu order by sort";
DataTable dt = OleDbHelper.ExecuteDataTable(OleDbHelper.CONN_STRING, CommandType.Text, strSql);
return MenuInfoAccess.GetMenuNodeCollection(dt);
}
public static IEnumerable<MenuInfo> GetMenuNodeCollection(DataTable dt)
{
int type = 1;
List<MenuInfo> menus = new List<MenuInfo>();
MenuInfo menu;
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr = dt.Rows[i];
if ((int)dr["ParentId"] == 0)
{
menu = new MenuInfo();
menu.Level = type;
menu.Id = (int)dr["ID"];
menu.TitleCN = dr["NameCN"] == DBNull.Value ? string.Empty : (string)dr["NameCN"];
menu.TitleEN = dr["NameEN"]==DBNull.Value?string.Empty:(string)dr["NameEN"];
menu.FilePath = dr["URL"]==DBNull.Value?string.Empty:(string)dr["URL"];
menu.IsVisibily = (bool)dr["Visibily"];
menu.ChildMenuInfo = GetChileNodeCollection(menu, dt, type);//递归获得子节点结合
menus.Add(menu);
}
}
return menus;
}
//CHILE COLLECTION
public static List<MenuInfo> GetChileNodeCollection(MenuInfo xElement, DataTable C, int type)
{
int childType = type + 1;
MenuInfo item;
List<MenuInfo> list = new List<MenuInfo>();
DataRow[] collection = C.Select("ParentId=" + xElement.Id, "sort");
if (collection.Length != 0)
{
foreach (DataRow dr in collection)
{
item = new MenuInfo();
item.Level = childType;
item.Id = (int)dr["ID"];
item.TitleCN = dr["NameCN"]==DBNull.Value?string.Empty:(string)dr["NameCN"];
item.TitleEN = dr["NameEN"] == DBNull.Value ? string.Empty : (string)dr["NameEN"];
item.FilePath = dr["URL"] == DBNull.Value ? string.Empty : (string)dr["URL"];
item.IsVisibily = (bool)dr["Visibily"];
item.ChildMenuInfo = GetChileNodeCollection(item, C, childType);//递归获得子节点结合
list.Add(item);
}
}
return list;
}
}
}