用Trewview生成树:动态的从数据库中取树结点

数据库中生成菜单的表的表结构
   如图:

其中,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;//当前编号
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值