• .Net XML 树


                                                                              .Net中的树
    树是很常见,下午写了棵树,不过感觉速度有些慢,但还找不出原因
    加载树有两种情况,
    l         一种是全部把所有的节点都加载
    l         一种是即点即插式
          
    1.         即点即插式,记得去年开发消息系统的时候就遇到这种情况(即点即插式),原因是用户点击某节点时,要去消息服务端去读此节点的子节点,很显然这有个延时,假设您是根据鼠标的坐标来判断读回来的节点的父节点时,问题来了,当然用户点A节点后,马上去点B节点,这时本该A的子节点,全跑到B节点去了.所有解决的办法是点击节点时要把节点的ID也发送服务端上,回来以便找到原来ID.把子节点加上去
    2.         全部把所有的节点都加载, 如果节点量大的话,对服务器要求也高,暂时的性能也减小,好处是加载后用户感觉速度快.
    下面就把全部加载的例子作为全程介绍
    l       确定数据源,一般情况下分为数据库和XML,前者是二维关系的,如果要表示树形结构的话,一定要有个字段作为父子关系的标识,而XML本身就可表示树,所以方便些
           为了方便起见,我们采用XML来表示,XML不用.Net本身自带的一些方法来读,为了和数据库一致性,都采用DataSet来封装,表的字段表示如下 
     
           图1
    生成OpusType.Xml文件来保存数据
    读取数据源
    Config.cs
    public static DataTable  GetClassType()

            
     
                DataTable dtOpusClass=new DataTable(); 

                    NewDataSet nds=new NewDataSet();

                    string configFile =    HttpContext.Current.Server.MapPath("OpusType.xml");

                    nds.ReadXml(configFile);

                    dtOpusClass=(DataTable)nds._Table;               
                   return dtOpusClass;
             }

    下面开始构造树
    Tree.cs
    public void maketree()

            {

                DataView dv= Config.GetClassType().DefaultView;
                dv.RowFilter = "FatherID =0"; //选出根
                for(int rowindex=0;rowindex < dv.Count ;rowindex ++)

                {

                    TreeNode n= new TreeNode();
                    n.ID=dv[rowindex].Row["ClassID"].ToString(); 
                    n.Text =dv[rowindex].Row["ClassName"].ToString();
                    maketreedetail(n);//去创建子节点
                    this.TreeView1.Nodes.Add(n);   

                } 
            }

            void  maketreedetail(TreeNode parent_node)

            {

                DataView dv= Config.GetClassType().DefaultView;
                dv.RowFilter = "FatherID="+parent_node.ID;  
                for(int rowindex=0;rowindex < dv.Count ;rowindex ++)

                {

                    TreeNode n= new TreeNode();
                    n.ID=dv[rowindex].Row["ClassID"].ToString(); 
                    n.Text =dv[rowindex].Row["ClassName"].ToString(); 
                    parent_node.Nodes.Add(n);
                    maketreedetail(n);//递归构造
                }         
            }

     
    需要注意的,DataView作为视图过滤,不用保存为源
     
  • 相关阅读:
    (剑指Offer)------二进制中1的个数
    LeetCode#58:最后一个单词的长度解析
    js 生成四个随机字母或数字+js获取当前日期
    ES6学习笔记----数组的扩展
    No component factory found for ListenerAddComponent. Did you add it to @NgModule.entryComponents?
    Can't bind to 'formGroup' since it isn't a known property of 'form'
    算法初相识---插入排序,冒泡排序,选择排序,以及分析算法
    Deno MongoDB 增删查改 接口
    Deno MySQL 增删查改接口
    Deno 几种常用的传参方式
  • 原文地址:https://www.cnblogs.com/supercode/p/175764.html
Copyright © 2020-2023  润新知