.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作为视图过滤,不用保存为源
 
原文地址:https://www.cnblogs.com/supercode/p/175764.html