最强asp.net实现Treeview无限分类解决方案
using System.Da
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.Da
/// <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\" on
}
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