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

关于TreeView控件使用一个只有高手才能解决的问题

TreeView 控件动态添加子节点以后,再展开其他节点,树结构就乱了。
代码如下:

TreeNode stn = tn.Parent;
            TreeNode tno = stn.ChildNodes[0];
          
            tn.ChildNodes.Clear();
            int index = stn.ChildNodes.IndexOf(tn);

            stn.ChildNodes.Remove(tn);
            if (tn.Value != tno.Value)
            {
                stn.ChildNodes.Remove(tno);
            }
            commList = new OrgDal().getOrgsComm(" where station='" + tn.Value + "'");
           
            for (int x = 0; x < commList.Count; x++)
            {
                if (commList[x].StationId == tn.Value)
                {
                    TreeNode childnodeCom = new TreeNode();
                    childnodeCom.Text = commList[x].Orgname;
                    childnodeCom.Value = commList[x].Orgid;
                    
                    childnodeCom.SelectAction = TreeNodeSelectAction.Select;
                    tn.ChildNodes.Add(childnodeCom);
                }
            }
            if (tn.Value != tno.Value)
            {
                stn.ChildNodes.AddAt(0, tno);
            }
            stn.ChildNodes.AddAt(index, tn);

以上添加子节点代码添加在TreeNodeExpanded事件中 --------------------编程问答-------------------- 求求各位高手,我在线等 --------------------编程问答-------------------- stn.ChildNodes.Remove(tn);这里已经把tn去除了,而后面又多次用到了tn,好乱 --------------------编程问答-------------------- 那个remove又add的代码是我为了做实验用的   现在去掉  还是老样子   --------------------编程问答-------------------- 我觉得你的关键问题就是在没有添加之前的clear和remove,这些很危险,很容易导致索引混乱,耐心点调试吧,如果数据多,先弄个简单的调试
而且你的 index是在最早取得的,之后进行了各种操作,包括删除,那么最后,你AddAt时,这个 index指向的node还是你最原始的node吗 --------------------编程问答-------------------- 好乱啊 --------------------编程问答-------------------- 动态添加了节点,在点击其他节点或控件,导致了页面回传,

则回传后需重新再次添加一边上一次动态添加的节点,否则节点肯定回丢失

http://topic.csdn.net/u/20080919/13/e4c22124-4a52-4e92-a06f-9d353be196b9.html --------------------编程问答--------------------

  
            tn.ChildNodes.Clear();
          
            commList = new OrgDal().getOrgsComm(" where station='" + tn.Value + "'");
           
            for (int x = 0; x < commList.Count; x++)
            {
                if (commList[x].StationId == tn.Value)
                {
                    TreeNode childnodeCom = new TreeNode();
                    childnodeCom.Text = commList[x].Orgname;
                    childnodeCom.Value = commList[x].Orgid;
                    
                    childnodeCom.SelectAction = TreeNodeSelectAction.Select;
                    tn.ChildNodes.Add(childnodeCom);
                }
            }

现在代码简化成这样  还是不行,会不会是显示checkbaox的问题,因为只有checkbox被选中的结构才会乱 --------------------编程问答-------------------- 怎么没人回帖了? 都吃饭去了?还是不屑? --------------------编程问答-------------------- 我只是来看高手怎么解决的 --------------------编程问答-------------------- 页面回传刷新了 --------------------编程问答-------------------- 代码拿走测试看看 --------------------编程问答-------------------- 程序改好了 就是不知道为什么,我把所有checked==true 的节点removed掉 然后在被展开节点(下面用n表示)重新赋完值以后再addAt进去就没事了 当然还有节点n 也被removed掉了,最后再重新addAt进去,问题就解决了 --------------------编程问答-------------------- 只是不知道为什么要这样做,页面回传TreeView控件不是有默认保存状态的么?
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,