当前位置:编程学习 > C#/ASP.NET >>

TREEVIEW采用的是异步加载,别人写的代码,现象有个BUG需要修正,高分求解决方案

C# WINFROM TREEVIEW里面的部分代码

public partial class FrmCodeFile : Form
    {
        Codefile _codeFile;

        public FrmCodeFile()
        {
            InitializeComponent();

            tsmiAdd.Click += new EventHandler(tsbNew_Click);
            tsmiModify.Click += new EventHandler(tsbEdit_Click);
            tsmiDel.Click += new EventHandler(tsbDel_Click);
            BindTreeList();
        }

        /// <summary>
        /// 树信息绑定
        /// </summary>
        void BindTreeList()
        {
            dicTree.Nodes.Clear();
            var firNode = new TreeNode("代码档案", 0, 0) { Name = "0" };
            firNode.ExpandAll();

            var codeFileList = CodeFileBLL.Query("AND PARENTID=0");
            codeFileList.ForEach(r =>
                {
                    var secNode = new TreeNode(string.Format("{0} {1}", r.Diccode, r.Dicname), 1, 1) { Tag = r, Name = r.Dicid.ToString() };
                    secNode.Nodes.Add("...");
                    firNode.Nodes.Add(secNode);
                });
            //RecursiveLoopNodes(_codeFileList, firNode);
            dicTree.Nodes.Add(firNode);
           

        }

        /// <summary>
        /// 递归循环调用
        /// </summary>
        /// <param name="firList">一级树集合</param>
        /// <param name="parentNode">上级节点</param>
        void RecursiveLoopNodes(List<Codefile> firList, TreeNode parentNode)
        {
            firList.ForEach(r =>
            {
                var secNode = new TreeNode(
                    string.Format("{0} {1}", r.Diccode, r.Dicname), 1, 1) { Tag = r, Name = r.Dicid.ToString() };

                if (r.Diccode.Length < 3 )
                    secNode.Nodes.Add("...");

                parentNode.Nodes.Add(secNode);
               
           
            });
        }

    /// <summary>
        /// 刷新树
        /// </summary>
        /// <param name="selectedNode">选择节点</param>
        /// <param name="isLoad">是否是加载</param>
        void RefreshTree(TreeNode selectedNode, bool isLoad = false)
        {
            if (selectedNode.LastNode != null && selectedNode.LastNode.Text != "..." && !isLoad) return;

            var currList = CodeFileBLL.Query(string.Format(" AND PARENTID={0}", Normal.ParseInt(selectedNode.Name)));
            selectedNode.Nodes.Clear();
            RecursiveLoopNodes(currList, selectedNode);
        }



得出的结果是所有的类前面都有个+号,实际上有些小类下面已经没用商品了的

我用鼠标点一下其中一个没有下级分类的09型钢,+号就消失了。。。。

我想实现的效果是有下级分类的就有+号,没用下级分类的就不要出现+号了~~~ --------------------编程问答-------------------- 如果你想每次点开一个节点的时候在获取此节点的子项就会这样,
如果想解决这个一个有两个方案:
1、一次遍历到底
2、每次获取节点子项的时候遍历到子项的子项; --------------------编程问答-------------------- 我想选择第二个方案怎么改代码?
比如我选了B代工品,它就会把代工品下面所有的子项都遍历一遍
麻烦帮改下代码,我不是编程人员,不是太懂~~~ --------------------编程问答-------------------- 油腻的师姐在哪里? --------------------编程问答--------------------
引用 2 楼 hqfgold 的回复:
我想选择第二个方案怎么改代码?
比如我选了B代工品,它就会把代工品下面所有的子项都遍历一遍
麻烦帮改下代码,我不是编程人员,不是太懂~~~


在 void RecursiveLoopNodes(List<Codefile> firList, TreeNode parentNode) 函数的parentNode.Nodes.Add(secNode); 下面添加以下代码试试看:

RefreshTree(secNode, true)


ps:通常都不采用第二个方案,因为load时间太长 --------------------编程问答-------------------- sqlchen 用你的方法可行,但是数据不多还好说,有些数据多的,直接卡死。。。 --------------------编程问答-------------------- 油腻的师姐~~
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,