我知道肯定很多人遇到过这种情况的!希望大家能给我点代码还有实例的!最好是实例的!还有资料的谢谢的!我会安大家给的是不是我要的给分的!发者有份的...

解决方案 »

  1.   

    http://topic.csdn.net/u/20101024/10/1ec0050f-a621-4bdc-9597-dd2370513eab.html
    非递归的。递归简单,自己研究去。著名的斐波那契该知道吧。你用递归斐波那契到50层看看效率。
      

  2.   

    根据parent,depth递归实现treeview
    public class Department
    {
        public string name { get; set; }
        public string code {get;set;}
        private List<Department> _childdepartment = new List<Department>();
        public List<Department> childDepartment
        {
            get
            {
                return _childdepartment ;
            }
        }
    }
    public class User
    {
        public string usrname { get; set; }
    }
    public static Department GetList()
        {
            var a = new Department  { name = "a", code = "0" };
            var b = new Department   { name = "b", code  = "001" };
            var c = new Department   { name = "c", code  = "002" };
            a.ChildDepartment.Add(b);
            a.ChildDepartment.Add(c);
            return a;
        }页面treeview
    private void BindData(TreeNodeCollection treeNodeCollection, Department dept)
        {
            var node = new TreeNode { Text =dept.name, Value = dept.code };
            treeNodeCollection.Add(node);
            if (dept.ChildDepartment.Count > 0)
                dept.ChildDepartment.ForEach(p => { BindData(node.ChildNodes, p); });
        }
      

  3.   

    如果菜单果真要超过5层,那么通常设计上就有问题了。超过5层(也许只是3层甚至1层),那么就必须动态加载。所以"无限级"是要有方法的,而一开始你只需要给出最简单的实现,并且知道稳定几天之后一定要重构.
    看来这里对所谓"著名的斐波那契"有个知其然不知其所以然的误区.比如我们要计算 f(n)=f(n-1)+f(n-2), 最初最笨的做法是简单地按照这个公式去计算, 因为在计算f(n-1)的时候其内部又重复计算了一遍f(n-2), 当递归时这种重复是巨大的. 所以, 只要先计算f(n-2)然后才计算f(n-1), 并且每一次计算完f(n)都缓存起来, 每一次计算f(n)之前都先去查询缓存中有没有, 那么就没有你说的那种东西. 因此我说你是知其然不知其所以然. 你觉得这个简单的重构也能随便归咎于递归-非递归之极端争论?
      

  4.   

    就像新闻阅读器一样,读xml文件,加入treeview中一样
    我也想过用递归,我试过,但没能成功。。实现起来好难哦,
    等高手解决。。
      

  5.   

    之所以我要说#1楼对递归计算"著名的斐波那契"知其然不知其所以然, 是因为lz这个问题根本不存在 f(n) 公式计算中巨大的重复计算量问题. 如果存在, 我们也只是要告诉lz把某两行代码调换一下位置\某个地方应该插入一两条缓存处理代码, 这就行了. 而并还到不了争论递归-非递归问题.
      

  6.   

    sorry, 不是"三楼", 是"二楼".
      

  7.   

    private void Form3_Load(object sender, EventArgs e)
            {
                TreeNode rootnode = new TreeNode();
                rootnode.Text = "管理";
                treeView1.Nodes.Add(rootnode);
                DiGuiFillTreeView(0, rootnode);
            }
    private void DiGuiFillTreeView(int ParentCode,TreeNode pNode)//ParentCode为此菜单的上级编码
            {
                DataSet ds = GetData(ParentCode);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        TreeNode node = new TreeNode();
                        node.Text = ds.Tables[0].Rows[i]["cdmc"].ToString();
                        pNode.Nodes.Add(node);
                        DiGuiFillTreeView(Convert.ToInt32(ds.Tables[0].Rows[i]["xh"]), node);
                    }
                }
            }
      

  8.   

    离散型制造企业在排工单的时候,要首先排最下面的工序的,如果你要动态加载的话,客户用着是很不爽的。客户要查看BOM的时候都是想一眼就能看清楚BOM结构的,客户的计算机水平跟我们的计算机水平不相同,要动态加载的话,一般的工程主管还以为BOM建错了呢。
      

  9.   

    树状菜单还是BOM?即使是BOM也要分时是什么模块中需要展示的(不是任何时候都要把几十万元件一次展示在屏幕上)
      

  10.   

    不至于。几十万个元件可以造大舰了。BOM现在很多都是用树形菜单显示的,也有用表格显示的。树形菜单显示更清晰,用户接受度好,被客户骂的次数也少。
      

  11.   

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) 
            {
                CreateObject();
            }
        }    private void CreateObject() 
        {
            StringBuilder sb = new StringBuilder();
            //获取所有菜单集合
            List<SysFun> sysFuns = SysFunManager.GetAll();
            //生产菜单列表
            sb.Append(StrMenu(sysFuns, 0,""));
            //将生成的菜单列表添加到页面中
            divMenu.InnerHtml = sb.ToString();    }
        /// <summary>
        /// 生成菜单列表
        /// </summary>
        /// <param name="myMenu">菜单集合</param>
        /// <param name="parentId">父ID</param>
        /// <param name="peixStr">复选框Id</param>
        /// <returns>返回菜单列表</returns>
        public string StrMenu(List<SysFun> myMenu , int parentId,string peixStr) 
        {
            StringBuilder sb = new StringBuilder();
            foreach (SysFun sysFuns in myMenu) 
            {
                if (sysFuns.ParentNodeId == parentId) 
                {
                    if (parentId == 0)
                    {
                        peixStr = "";
                        sb.Append ( "<div class='parentMenu'>");
                    }
                    else 
                    {
                        sb.Append ("<div class='chaildMenu'>");
                    }                //拼接复选框Id
                    string cbName = peixStr + "_" + sysFuns.Id;
                    //添加复选框
                    string str = "<input type='checkbox' name='cbRole' id='{2}' value='{0}' onclick=selRole(\"{2}\") />{1}";
                    sb.AppendFormat(str, sysFuns.Id, sysFuns.DisplayName,cbName); //格式化str
                    string childNode = StrMenu(myMenu, sysFuns.Id,cbName);  //调用自己,实现迭代
                    sb.Append(childNode);   //追加字符串
                    sb.Append("</div>");
                }
            }
            return sb.ToString();
        }