这种树形结构的处理,无论使用dataTable还是List,都可以使用递归的方法来表现出来。 以前在做一些系统的菜单时,会设计这样的表结构: public class ItemList { public string ItemName; public List<ItemList> ChildrenItems; }然后你可以定义一个List<ItemList> list=new List<ItemList>();将你的id为0的添加进去,剩下的递归添加就行
我自己寫了一下,不行,麻煩幫忙修改下namespace BLL { public class MenuLogic:BaseLogic { public DataTable GetMenu() { return this.ExecuteAdapterDT("select * from t_menu"); } } public class Menu { public string id { get; set; } public string parent_id { get; set; } public string name { get; set; } private List<Menu> _list; public List<Menu> list { get { return _list; } set { this._list = new List<Menu>(); } } } } public partial class Default1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { BLL.Menu m = DtToList(); } public static BLL.Menu DtToList() { DataTable dt = new MenuLogic().GetMenu();//全部 BLL.Menu m = new BLL.Menu(); DataRow[] drs =dt.Select("parent_id=0"); foreach (DataRow dr in drs) { BLL.Menu childm = new BLL.Menu(); childm.id = dr["id"].ToString(); childm.name = dr["name"].ToString(); // m.list.Add(childm); if (AppendChild(dr, dt) != null) { childm.list.Add(AppendChild(dr, dt)); } } return m; } private static BLL.Menu AppendChild(DataRow dr, DataTable dtAll) { BLL.Menu childm = new BLL.Menu(); DataRow[] rows = dtAll.Select("parent_id='" + dr["id"].ToString().Trim() + "'"); if (rows.Length == 0) { } else { foreach (DataRow row in rows) {
以前在做一些系统的菜单时,会设计这样的表结构:
public class ItemList
{
public string ItemName;
public List<ItemList> ChildrenItems;
}然后你可以定义一个List<ItemList> list=new List<ItemList>();将你的id为0的添加进去,剩下的递归添加就行
{
public class MenuLogic:BaseLogic
{
public DataTable GetMenu()
{
return this.ExecuteAdapterDT("select * from t_menu");
}
} public class Menu
{
public string id { get; set; }
public string parent_id { get; set; }
public string name { get; set; }
private List<Menu> _list;
public List<Menu> list
{
get
{
return _list;
}
set
{
this._list = new List<Menu>();
}
}
}
}
public partial class Default1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
BLL.Menu m = DtToList();
} public static BLL.Menu DtToList()
{
DataTable dt = new MenuLogic().GetMenu();//全部
BLL.Menu m = new BLL.Menu();
DataRow[] drs =dt.Select("parent_id=0");
foreach (DataRow dr in drs)
{
BLL.Menu childm = new BLL.Menu();
childm.id = dr["id"].ToString();
childm.name = dr["name"].ToString();
//
m.list.Add(childm);
if (AppendChild(dr, dt) != null)
{
childm.list.Add(AppendChild(dr, dt));
} } return m;
} private static BLL.Menu AppendChild(DataRow dr, DataTable dtAll)
{ BLL.Menu childm = new BLL.Menu();
DataRow[] rows = dtAll.Select("parent_id='" + dr["id"].ToString().Trim() + "'");
if (rows.Length == 0)
{ }
else
{
foreach (DataRow row in rows)
{
childm.list.Add(AppendChild(row, dtAll));
}
}
return childm;
}}
无所谓,到时用递归查找一样的
无所谓,到时用递归查找一样的
我現在的需求就是如果當前的Menu有子Menu,就把子Menu放進當前Menu的List<Menu> list字段裏面啊..
DataTable dt = new MenuLogic().GetMenu();//全部
public static List<BLL.Menu> DtToList()
{
List<BLL.Menu> menus = new List<BLL.Menu>();
DataRow[] drs = dt.Select("parent_id='0'");
foreach (DataRow dr in drs)
{
BLL.Menu childm = new BLL.Menu();
childm.id = dr["id"].ToString();
childm.name = dr["name"].ToString();
menus.Add(childm);
List<BLL.Menu> list = AppendChild(childm);
if (list != null&&list.Count>0)
{
childm.list.AddRange(list);
}
} return menus;
} private static void AppendChild(BLL.Menu parent)
{
DataRow[] drs = dt.Select("parent_id='" + parent.id + "'");
foreach (DataRow dr in drs)
{
BLL.Menu childm = new BLL.Menu();
childm.id = dr["id"].ToString();
childm.name = dr["name"].ToString();
parent.list.Add(childm);
List<BLL.Menu> list = AppendChild(childm);
if (list != null && list.Count > 0)
{
childm.list.AddRange(list);
}
}
return;
}简单修改了下,没做测试,基本上这么个思路,lz亲测吧