TreeView的生成

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

 using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

/// <summary>

/// Tree 的摘要说明

/// </summary>

public class Tree {

    private string _treeHtml;

    private DataTable _dataTable;

    /// <summary>

    /// 根据DataTable对象,生成一棵树

    /// </summary>

    /// <param name="dataTable">树中节点的数据</param>

    /// <returns>树的HTML代码</returns>

    public string CreateTree(DataTable dataTable)

    {

        this._dataTable = dataTable;

        this.CreateSubTree(0);

        return _treeHtml;

    }

    /// <summary>

    /// 获取父节点编号为parentId的所有节点,并用DataTable返回

    /// </summary>

    /// <param name="parentId">父节点编号</param>

    /// <returns>DataTable形式的所有孩子节点数据</returns>

    private DataTable GetChilds(int parentId)

    {

        DataTable childNodes = new DataTable();

        childNodes = this._dataTable.Clone();

        foreach (DataRow dr in this._dataTable.Rows)

 

        {

            if (Convert.ToInt32(dr["ParendId"]) == parentId)

            {

                childNodes.ImportRow(dr);

            }

        }

        return childNodes;

    }

    /// <summary>

    /// 判断编号为nodeId的节点是否为叶子节点

    /// </summary>

    /// <param name="nodeId">待判断的节点编号</param>

    /// <returns>是叶子节点:返回true;否则:返回false</returns>

    private bool IsLeaf(int nodeId)

    {

        foreach (DataRow dr in this._dataTable.Rows)

            if (Convert.ToInt32(dr["ParendId"]) == nodeId)

                return false;

        return true;

    }

    /// <summary>

    /// 得到编号为nodeId的节点的父节点编号

    /// </summary>

    /// <param name="nodeId">节点编号</param>

    /// <returns>父节点编号</returns>

    private int GetParent(int nodeId)

    {

        foreach (DataRow dr in this._dataTable.Rows)

            if (Convert.ToInt32(dr["Id"]) == nodeId)

                return Convert.ToInt32(dr["ParendId"]);

        return -1;

 

    }

    /// <summary>

    /// 得到编号为nodeId的节点的级别,根节点为0

    /// </summary>

    /// <param name="nodeId">待计算的巨额电编号</param>

    /// <returns>节点的级别,根节点为0</returns>

    private int GetLevel(int nodeId)

    {

        int parentId = GetParent(nodeId);

        if (parentId == 0) return 1;

        else

            return GetLevel(parentId) + 1; //递归

    }

    /// <summary>

    /// 递归生成根编号为nodeId的树

    /// </summary>

    /// <param name="nodeId">所要生成子树的根节点</param>

    private void CreateSubTree(int nodeId)

    {

        DataTable childNodes = this.GetChilds(nodeId); //获取根节点的所有孩子

        //循环生成根节点的所有孩子对应的HTML

        int childId = 0;

        foreach (DataRow dr in childNodes.Rows)

        {

            childId = Convert.ToInt32(dr["Id"]);

            this._treeHtml += "<div id=div_" + childId.ToString() + ">";

 

 

            //根据该孩子的级别,生成一些空格,以体现层次结构

 

            for (int i = 0; i < GetLevel(childId); i++)

                this._treeHtml += "&nbsp;&nbsp;";

 

            //如果该孩子是叶子节点,则生成其HTML代码

            if (this.IsLeaf(childId))

            {

                this._treeHtml += "<img src='.//Images//folder.gif'/><a href=" + dr["TreeUrl"] + ">" + dr["TreeName"] + "</a></div>";

            }             //如果该孩子为中间节点,则首先构造其HTML,然后递归生成其所有孩子的HTML             else             {

                this._treeHtml += "<img src='.//Images//folderopen.gif'/><a href=" + dr["TreeUrl"] + ">" + dr["TreeName"] + "</a></div>";                 this.CreateSubTree(childId);//递归             }         }     } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值