asp.net treeview递归写法

这是我在网上摘抄的一个递归添加的方法。

asp页面添加的treeview名称为TreeVieww1,绑定数据库后得到的DataTable名称为dt,需要在treeview中绑定的节点Text为"name",Node为"id",
父节点id为"fatherid",
那么在asp页面可以这样写
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //获取填充树所需要的DataTable
            DataTable dt = dtAdapter.GetClass();
            //填充树
            newtree.AddTree(dt,TreeView1,"name","id","005000000000", (TreeNode)null);
        }
    }
其中"005000000000"是我指派给根节点的id(我设置id/fatherid为string类型的),"(TreeNode)null"为设置初始节点的TreeNode为空。下面的方法,
可以放在工程的任何位置,达到重用的目的。
 //递归添加树的节点 
        public void AddTree(DataTable dt, TreeView tv, string NodeText, string NewNode, string FatherID, TreeNode pNode)
        {
            DataView dvTree = new DataView(dt);
            //过滤FatherID,得到当前的所有子节点  
            dvTree.RowFilter = "fatherid=" + FatherID;
            foreach (DataRowView Row in dvTree)
            {
                TreeNode Node = new TreeNode();
                if (pNode == null)
                {         //添加根节点  
                    Node.Text = Row[NodeText].ToString();
                    tv.Nodes.Add(Node);
                    Node.Expanded = true;
                    AddTree(dt, tv, NodeText, NewNode, Row[NewNode].ToString(), Node);         //再次递归  
                }
                else
                {       //添加当前节点的子节点  
                    Node.Text = Row[NodeText].ToString().ToString();
                    pNode.ChildNodes.Add(Node);
                    Node.Expanded = true;
                    AddTree(dt, tv, NodeText, NewNode, Row[NewNode].ToString(), Node);         //再次递归  
                }
            }
        }
看了这个方法后启发很大,一下是我对这个方法的改写。
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
           DataTable dt;
            object[] str = dt.Rows[0].ItemArray;
            TreeMenu.BindTree(TreeView1.Nodes[0], dt, str[dt.Columns["id"].Ordinal].ToString());

        }
    }
我觉得这样调用更具用通用性。fatherid 不用自己写死。
  public static void BindTree(TreeNodeCollection Nds, DataTable dt, string id)
    {
        DataView dv = new DataView(dt);
        dv.RowFilter = "fatherid = '" + id.ToString() + "'";
        TreeNode node;
        foreach (DataRowView drv in dv)
        {
            node = new TreeNode();
            node.Value= drv["id"].ToString();
            node.Text = drv["name"].ToString();
            Nds.Add(node);
            BindTree(node.ChildNodes, dt, drv["id"].ToString());
        }
    }
递归循环添加更为简洁,而且如意明白。
反正我是明白了,不知大家明白不。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值