你直接放在一个List里面就行了,要用的时候用递归查找就行了,不用List 里面放List

解决方案 »

  1.   

    这种树形结构的处理,无论使用dataTable还是List,都可以使用递归的方法来表现出来。
    以前在做一些系统的菜单时,会设计这样的表结构:
    public class ItemList
    {
       public string ItemName;
       public List<ItemList> ChildrenItems;
    }然后你可以定义一个List<ItemList> list=new List<ItemList>();将你的id为0的添加进去,剩下的递归添加就行
      

  2.   

    我自己寫了一下,不行,麻煩幫忙修改下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)
                {
                    
                    childm.list.Add(AppendChild(row, dtAll));
                }
            }
            return childm;
        }}
      

  3.   

    直接把你上面的dataTable转换成List就行了,不用在Menu对象里面放一个List<Menu>http://blog.csdn.net/happy09li/article/details/7531804
      

  4.   

    直接把你上面的dataTable转换成List就行了,不用在Menu对象里面放一个List<Menu>http://blog.csdn.net/happy09li/article/details/7531804Menu裏面可能有多個子menu的.
      

  5.   

    直接把你上面的dataTable转换成List就行了,不用在Menu对象里面放一个List<Menu>http://blog.csdn.net/happy09li/article/details/7531804Menu裏面可能有多個子menu的.
    无所谓,到时用递归查找一样的
      

  6.   

    直接把你上面的dataTable转换成List就行了,不用在Menu对象里面放一个List<Menu>http://blog.csdn.net/happy09li/article/details/7531804Menu裏面可能有多個子menu的.
    无所谓,到时用递归查找一样的
    我現在的需求就是如果當前的Menu有子Menu,就把子Menu放進當前Menu的List<Menu> list字段裏面啊..
      

  7.   


            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亲测吧