最强asp.net实现Treeview无限分类解决方案 - 风林 - 林雨

最强asp.net实现Treeview无限分类解决方案 - 风林 - 林雨

用到类最强asp.net实现Treeview无限分类解决方案 - 风林 - 林雨

最强asp.net实现Treeview无限分类解决方案
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;
using System.Data.SqlClient;

/// <summary>
/// CreatTree 的摘要说明
/// </summary>
public class CreatTree
{
 public CreatTree()
 {
      
  //
  // TODO: 在此处添加构造函数逻辑
  //
 }
    /// <summary>
    /// 创建 TreeView
    /// 此方法采取一次性加载目标数据到 DataTable,递归查询 DataTable ,创建子节点
    /// </summary>
    /// <param name="jd">根节点如:00</param>
    /// <param name="id">绑定数据库节点的ID</param>
    ///  <param name="name">绑定数据库节点的</param>
    ///  <param name="leng">节点的递增位数</param>
    ///     <param name="ifcheckbox">是否有选择</param>
    public static void CreateTreeView( string sql,System.Web.UI.WebControls.TreeView treeMenu,string jd,string id,string name,int leng, bool ifcheckbox)
    {
        const string VirtualRootId = ""; // 虚拟的根节点 ID, 表中 ParentID=0 的节点表示无实际父节点
        string SQL = sql ;
        string connStr = DB.connectionString;
        SqlDataAdapter da = new SqlDataAdapter(SQL, connStr);
        DataTable dt = new DataTable();
        da.Fill(dt);
        CreateTreeViewRecursive(treeMenu.Nodes, dt, VirtualRootId,jd,id,name,leng,ifcheckbox );
    }

    /// <summary>
    /// 递归查询数据,创建 TreeNode 节点
    /// </summary>
    /// <param name="nodes"></param>
    /// <param name="dataSource"></param>
    /// <param name="parentId"></param>
    /// <param name="jd">根节点如:00</param>
    /// <param name="id">绑定数据库节点的ID</param>
    ///  <param name="name">绑定数据库节点的</param>
    ///  <param name="leng">节点的递增位数</param>
    ///   <param name="ifcheckbox">是否有选择</param>
    private static void CreateTreeViewRecursive(TreeNodeCollection nodes, DataTable dataSource, string parentId,string jd,string id,string name,int leng,bool ifcheckbox)
    {
        TreeNode node;
        int len = parentId.Trim().Length;
        string fliter = "";
        //判断是否为根结点,ID=00表示根结点
        if (parentId == "")
        {
            fliter = String.Format("{3}={0} and len({2})={1}", jd, len + leng, id, id);
        }
        else
        {
            fliter = String.Format("substring({2},1," + len + ")={0} and len({3})={1}", parentId, len + leng, id, id);
        }
        // 查询子节点
        DataRow[] drArr = dataSource.Select(fliter);
        foreach (DataRow dr in drArr)
        {
            node = new TreeNode();
            nodes.Add(node);
            if (ifcheckbox == true)
            {
                node.Text = "<input id='" + dr[id].ToString() + "' value='" + dr[id].ToString() + "' type=\"checkbox\" onclick=\"OnTreeNodeChecked('" + dr[id].ToString().Trim() + "')\" />" + (string)dr[name];
            }
            else
            {
                node.Text =dr[name].ToString();
            }
            node.Value = dr[id].ToString();
                // 递归创建子节点
            CreateTreeViewRecursive(node.ChildNodes, dataSource, dr[id].ToString(),jd,id,name,leng,ifcheckbox );
            // 移除已添加行,提高性能
            dataSource.Rows.Remove(dr);
        }
    }

}
在后台调用类 page_load

 CreatTree.CreateTreeView(Select * from M_Guest, treeMenu, "000", "Gue_number", "Gue_name", 3, false);

如不明请加群66060257

posted on 2011-07-01 23:46  #阿志#  阅读(462)  评论(0编辑  收藏  举报