用Trewview生成樹:動態的從數據庫中取樹結點

數據庫中生成菜單的表的表結構
   如圖:
o_tree.gif
其中,mnu_xh爲結點的序號,mnu_name爲結點要顯示的文本,mnu_url爲該結點要鏈接的網頁,mnu_fbm爲父結點的序號,
   mnu_img爲結點的圖形,mnu_end爲是否是末結點,sqldst.Tables[0]爲所有要在樹上顯示的結點的記錄。
  
    在page第一次加載時調用filltree填充樹的第一級目錄,第一級目錄的父結點爲"0"。
   
    getnode(this.TreeView1,"0");                //得到當前結點
 this.TreeView1.Nodes[0].ID="0";             //設置根結點的ID
 this.TreeView1.Nodes[0].Text="admin";       //設置根結點顯示的文本
 this.TreeView1.Nodes[0].NodeData ="0";      //設置根結點的NadeData
    filltree(nodex,"mnu_lb='1' and mnu_fbm='0'","mnu_xh","mnu_name","mnu_url","mnu_img","mnu_lb","mnu_end");
    
    其中mnu_bl,mnu_fbm作爲從數據源中篩選數據的條件,nodex爲當前結點。
  
    filltree作爲填寫充樹的方法,填充當前結點tnc下面的結點。
  
 private void filltree(TreeNode tnc,string strslt,string strcode,string strname,string strurl,string strimg,string strgrade,string strend)
 {
  DataRow []drs;
  drs=sqldst.Tables[0].Select(strslt);//根據strslt對數據源進行有條件的篩選
  tnc.Nodes.Clear();  //清除子樹
  foreach(DataRow dr in drs)
  {
   TreeNode rootnode=new TreeNode();
   rootnode.ID=GetRowValue(dr,strcode);//將父結點的值作爲該結點的ID
   rootnode.Text=GetRowValue(dr,strname);//
   rootnode.NavigateUrl =GetRowValue(dr,strurl);
   rootnode.ImageUrl =GetRowValue(dr,strimg);
   rootnode.ExpandedImageUrl =GetRowValue(dr,strimg);
   rootnode.SelectedImageUrl =GetRowValue(dr,strimg);
   rootnode.NodeData=GetRowValue(dr,strgrade);
   tnc.Nodes.Add(rootnode); //給tnc添加一個結點
   if(GetRowValue(dr,strend)=="0")
   {
    TreeNode tmpnode=new TreeNode(); //添加臨時結點
    tnc.Nodes[tnc.Nodes.Count-1].Nodes.Add(tmpnode);  
   }
  }
 }
  
 //下面是TreeView的展開事件,展開下級結點。
 
 private void TreeView1_Expand(object sender, Microsoft.Web.UI.WebControls.TreeViewClickEventArgs e)
 {
  getnode(this.TreeView1,e.Node);
  if(this.TreeView1.Enabled==false)
   nodex.Expanded=false;
  else
  {
   int jc=int.Parse(nodex.NodeData.ToString())+1;
   //填充樹,mnu_lb(NodeData),mnu_fbm(ID)爲條件
   filltree(nodex,"mnu_lb='"+jc+"' and mnu_fbm='"+nodeid+"'","mnu_xh","mnu_name","mnu_url","mnu_img","mnu_lb","mnu_end");
  }
 }
 //取出數據庫中對應的值
 private string GetRowValue(DataRow dr,String sCol)
 {
  if((dr.Table.Columns.Contains(sCol)==false)  || (dr.IsNull(sCol)))
   return "";                          
  else
  {
   if(dr[sCol].GetType().ToString()=="System.Boolean")
    if(dr[sCol].ToString()=="True")
     return "1";
    else
     return "0";
   else
    return dr[sCol].ToString();
   
  }
 }
 //取得當前結點
 private void getnode(TreeView tv ,string xh)
 {
  string []id=xh.Split('.');
  TreeNode tc=tv.Nodes[0];
  
  for(int i=1;i<id.Length;i++)
  {
   tc=tc.Nodes[int.Parse(id[i])];
  }
  nodex=tc;  //當前結點
  nodeid=tc.ID;//當前編號
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章