treeview 树目录产生 数据库表中有ID,ParentId,name字段通过递归函数产生树型目录谁有简练易懂的代码阿,谢谢!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if(!IsPostBack){TreeView1.Nodes.Clear();SqlDataReader dr=db.ExecuteSql("select * from 数据库表");while(dr.Read()){ TreeNode newNode=new TreeNode(); newNode.Text = dr["ID"].ToString(); newNode.ID = dr["name"].ToString(); InitTree(newNode.Nodes, "0");}}======================================private void InitTree(TreeNodeCollection Nds,string parentId){ DataRow[] rows; rows=ds.Tables[0].Select("parentId='"+parentId+"'"); TreeNode temNd; foreach(DataRow row in rows) { temNd=new TreeNode(); temNd.ID=row["Id"].ToString(); temNd.Text=row["Name"].ToString(); Nds.Add(temNd); InitTree(temNd.Nodes,temNd.ID); }}=================没测试 大概是这个意思 根节点为0 根节点不唯一的ParentId为空时都为根的! if(!IsPostBack){TreeView1.Nodes.Clear();SqlDataReader dr=db.ExecuteSql("select * from 数据库表");while(dr.Read()){ TreeNode newNode=new TreeNode(); newNode.Text = dr["ID"].ToString(); newNode.ID = dr["name"].ToString(); if(dr["parentId"].ToSting()=="") { TreeView1.Nodes.Add(newNode); InitTree(newNode.Nodes, dr["ID"].ToString()); }}}=================这样试试 思路是 当节点的parentId时,说明时根节点。 它的ID是别人的父节点 //.net2.0 递归实现 数据库读取改成自己的即可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;using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page{ private string connstring = ConfigurationManager.ConnectionStrings["ConnStr"].ToString(); private bool isHaveCheckBox = false; private bool isExpanded = false; private DataTable dtTree = null; protected void Page_Load(object sender, EventArgs e) { //Response.Write("tttttttttt"); if (!IsPostBack) { AreaTree.Nodes.Add(getRootAreaTreeNode(false, false)); } } /// <summary> /// 获取包含全部子节点的根节点数据 /// </summary> /// <param name="haveCheckBox">节点是否产生CheckBox</param> /// <param name="expanded">节点是否展开</param> /// <returns></returns> public TreeNode getRootAreaTreeNode(bool haveCheckBox, bool expanded) { //drPeng.HS.BR.AreaTree brTree = new drPeng.HS.BR.AreaTree(); string rootID = "0001";//brTree.getRootAreaTreeID(); string rootName = "中国";//brTree.getRootAreaTreeName(); //ds = brTree.getAllAreaTree(); isHaveCheckBox = haveCheckBox; isExpanded = expanded; #region populate root node TreeNode rootNode = new TreeNode(); rootNode.Text = rootName; rootNode.Value = rootID; //rootNode. = rootName; // rootNode.NodeData = "0001"; rootNode.Expanded = true; // rootNode.CheckBox = isHaveCheckBox; #endregion DataSet dsTree = SqlHelper.ExecuteDataset(connstring, CommandType.Text, "select * from TB_Area"); dtTree = dsTree.Tables[0]; this.populateAreaTree(rootID, rootNode); return rootNode; } private void populateAreaTree(string parentID, TreeNode pNode) { DataRow[] dRows = dtTree.Select("ParentAreaCode='" + parentID +"'"); if (dRows.Length > 0) { TreeNode Node = null; foreach (DataRow drow in dRows) { Node = new TreeNode(); Node.Text = drow["AreaName"].ToString(); Node.Value = drow["AreaCode"].ToString(); //Node.DataItem = Node.Text + "|" + Node.Value; Node.Expanded = isExpanded; pNode.ChildNodes.Add(Node); populateAreaTree(Node.Value, Node); //递归 } } }} 下面第二个FillTree是我用的一个函数,是用在框架中,点击某个节点另一个框架显示另外页面并传参数过去。第一个FillTree是示例。如果你不需要导航,把相应参数去掉即可。private void FillTree(){ string strUrl = "跳转页.aspx"; DepartSet ds = new DepartSet(); DepartSetTableAdapters.DepartmentsTableAdapter adp = new DepartSetTableAdapters.DepartmentsTableAdapter(); adp.Fill(ds.Departments); tvDeparts.Nodes.Clear(); FillTree(ds.Departments, tvDeparts.Nodes, "-1", "ParentID", "SerialNum", "DepartName", "DepartID", strUrl, "Content");}/// <summary>/// 填充树控件/// </summary>/// <param name="dt">树控件结构所在表</param>/// <param name="tns">节点集合</param>/// <param name="strParentID">父节点值</param>/// <param name="strParentField">父节点字段</param>/// <param name="strSortField">排序字段</param>/// <param name="strTextField">显示文本字段</param>/// <param name="strValueField">值字段</param>/// <param name="strNavigate">导航页</param>/// <param name="strTarget">导航目标</param>public void FillTree(DataTable dt, TreeNodeCollection tns, string strParentID, string strParentField, string strSortField, string strTextField, string strValueField, string strNavigate, string strTarget){ TreeNode tn = null; DataRow[] drs = dt.Select(string.Format("{0}={1}", strParentField, strParentID), strSortField); foreach (DataRow dr in drs) { tn = new TreeNode(); tn.Text = dr[strTextField].ToString(); tn.Value = dr[strValueField].ToString(); tn.NavigateUrl = string.Format("{0}?P={1}", strNavigate, dr[strValueField]); tn.Target = strTarget; tns.Add(tn); FillTree(dt, tn.ChildNodes, dr[strValueField].ToString(), strParentField, strSortField, strTextField, strValueField, strNavigate, strTarget); }} using System;using System.Data;using System.Configuration;using System.Collections;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;public partial class word_admin_left : System.Web.UI.Page{ private void Page_Load(object sender, System.EventArgs e) { try { Class1 aa = new Class1(); string sql = "select * from tbTree"; SqlDataAdapter adp = aa.SQLDA(sql); DataSet ds = new DataSet(); adp.Fill(ds); this.ViewState["ds"] = ds; } catch (Exception ex) { Session["Error"] = ex.ToString(); Response.Redirect("error.aspx"); //?跳转程序的公共错误处理页面 } //调用递归函数,完成树形结构的生成 if (!Page.IsPostBack) { AddTree(0, (TreeNode)null); } } //递归添加树的节点 public void AddTree(int ParentID, TreeNode pNode) { DataSet ds = (DataSet)this.ViewState["ds"]; DataView dvTree = new DataView(ds.Tables[0]); //过滤ParentID,得到当前的所有子节点 dvTree.RowFilter = "[PARENTID] = " + ParentID; foreach (DataRowView Row in dvTree) { TreeNode Node = new TreeNode(); if (pNode == null) { //添加根节点 Node.Text = Row["name"].ToString(); TreeView1.Nodes.Add(Node); Node.Expanded = true; AddTree(Int32.Parse(Row["id"].ToString()), Node); //再次递归 } else { //?添加当前节点的子节点 Node.Text = Row["name"].ToString(); Node.NavigateUrl = Row["url"].ToString(); pNode.ChildNodes.Add(Node); Node.Expanded = true; AddTree(Int32.Parse(Row["id"].ToString()), Node); //再次递归 } } } } using .......namespace.......Your Page className....protected SqlConnection con;protected SqlDataAdapter sda;protected SqlCommand com;private Page_Load(object sender, System.EventArgs e){ con=new SqlConnection("Data Source=.;Initial Catalog=[Your DB Name];Integrated Security=True;user id=sa;password="); sda=new SqlDataAdapter(); com=new SqlCommand();com.Connection=con;sda.SelectCommand=com;AddToTreeView(null);//添加根节点}private void AddToTreeView(TreeNode n){ DataTable dt; TreeNode tn; if (n == null) { sda.SelectCommand = "select * from [Table Name] where parentId is null"; } else { sda.SelectCommand = "select * from [Table Name] where parentId="+tn.Value; } sda.Fill(dt); foreach (DataRow r in dt.Rows) { tn = new TreeNode(r[2].ToString()); tn.Value = r[0].ToString();//把ID值放在Value属性里; if (n == null) { this.TreeView1.Nodes.Add(tn); } else { n.ChildNodes.Add(tn); } AddToTree(tn); }} hertcloud(·£孙子兵法£·) ( ) 信誉:100 Blog 加为好友 2007-3-9 22:10:07 得分: 15 你的方法还缺少个引用就是需要下载DataAccessApplicationBlock.msi安装包后并且添加下面的using Microsoft.ApplicationBlocks.Data;才可以 vs2008不能启动调试怎么解决? 图片在移动过程中逐渐缩小的代码 输入网址生成图片?怎么弄? CSS 问题啊!! 今天心情不错股票涨停,放分 网站不断被注入,下面给出被注入以后的数据,谁能看出是什么放注入的? 获取网页编码问题和防止出现999错误 字符串传递问题 请教一个理论问题。想用asp.net开发一个新闻系统,用数据库好还是XML的好? 关于vs.net中的时间控件! 明明申明了变量,为啥还提示必须声明变量 '@ids' 滤镜问题,急,控件不可用。
{
TreeView1.Nodes.Clear();
SqlDataReader dr=db.ExecuteSql("select * from 数据库表");
while(dr.Read())
{
TreeNode newNode=new TreeNode();
newNode.Text = dr["ID"].ToString();
newNode.ID = dr["name"].ToString();
InitTree(newNode.Nodes, "0");
}
}
======================================private void InitTree(TreeNodeCollection Nds,string parentId)
{
DataRow[] rows;
rows=ds.Tables[0].Select("parentId='"+parentId+"'");
TreeNode temNd;
foreach(DataRow row in rows)
{
temNd=new TreeNode();
temNd.ID=row["Id"].ToString();
temNd.Text=row["Name"].ToString();
Nds.Add(temNd);
InitTree(temNd.Nodes,temNd.ID);
}
}=================
没测试 大概是这个意思 根节点为0
ParentId为空时都为根的!
{
TreeView1.Nodes.Clear();
SqlDataReader dr=db.ExecuteSql("select * from 数据库表");
while(dr.Read())
{
TreeNode newNode=new TreeNode();
newNode.Text = dr["ID"].ToString();
newNode.ID = dr["name"].ToString();
if(dr["parentId"].ToSting()=="")
{
TreeView1.Nodes.Add(newNode);
InitTree(newNode.Nodes, dr["ID"].ToString());
}
}
}
=================
这样试试 思路是 当节点的parentId时,说明时根节点。 它的ID是别人的父节点
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;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
private string connstring = ConfigurationManager.ConnectionStrings["ConnStr"].ToString(); private bool isHaveCheckBox = false;
private bool isExpanded = false;
private DataTable dtTree = null;
protected void Page_Load(object sender, EventArgs e)
{
//Response.Write("tttttttttt");
if (!IsPostBack)
{
AreaTree.Nodes.Add(getRootAreaTreeNode(false, false));
} } /// <summary>
/// 获取包含全部子节点的根节点数据
/// </summary>
/// <param name="haveCheckBox">节点是否产生CheckBox</param>
/// <param name="expanded">节点是否展开</param>
/// <returns></returns>
public TreeNode getRootAreaTreeNode(bool haveCheckBox, bool expanded)
{
//drPeng.HS.BR.AreaTree brTree = new drPeng.HS.BR.AreaTree(); string rootID = "0001";//brTree.getRootAreaTreeID();
string rootName = "中国";//brTree.getRootAreaTreeName();
//ds = brTree.getAllAreaTree(); isHaveCheckBox = haveCheckBox;
isExpanded = expanded; #region populate root node
TreeNode rootNode = new TreeNode();
rootNode.Text = rootName;
rootNode.Value = rootID;
//rootNode. = rootName;
// rootNode.NodeData = "0001";
rootNode.Expanded = true;
// rootNode.CheckBox = isHaveCheckBox;
#endregion DataSet dsTree = SqlHelper.ExecuteDataset(connstring, CommandType.Text, "select * from TB_Area");
dtTree = dsTree.Tables[0];
this.populateAreaTree(rootID, rootNode); return rootNode;
} private void populateAreaTree(string parentID, TreeNode pNode)
{ DataRow[] dRows = dtTree.Select("ParentAreaCode='" + parentID +"'");
if (dRows.Length > 0)
{
TreeNode Node = null;
foreach (DataRow drow in dRows)
{
Node = new TreeNode();
Node.Text = drow["AreaName"].ToString();
Node.Value = drow["AreaCode"].ToString();
//Node.DataItem = Node.Text + "|" + Node.Value;
Node.Expanded = isExpanded;
pNode.ChildNodes.Add(Node);
populateAreaTree(Node.Value, Node); //递归
}
}
}
}
{
string strUrl = "跳转页.aspx";
DepartSet ds = new DepartSet();
DepartSetTableAdapters.DepartmentsTableAdapter adp = new DepartSetTableAdapters.DepartmentsTableAdapter();
adp.Fill(ds.Departments);
tvDeparts.Nodes.Clear();
FillTree(ds.Departments, tvDeparts.Nodes, "-1", "ParentID", "SerialNum", "DepartName", "DepartID", strUrl, "Content");
}
/// <summary>
/// 填充树控件
/// </summary>
/// <param name="dt">树控件结构所在表</param>
/// <param name="tns">节点集合</param>
/// <param name="strParentID">父节点值</param>
/// <param name="strParentField">父节点字段</param>
/// <param name="strSortField">排序字段</param>
/// <param name="strTextField">显示文本字段</param>
/// <param name="strValueField">值字段</param>
/// <param name="strNavigate">导航页</param>
/// <param name="strTarget">导航目标</param>
public void FillTree(DataTable dt, TreeNodeCollection tns, string strParentID, string strParentField, string strSortField, string strTextField, string strValueField, string strNavigate, string strTarget)
{
TreeNode tn = null;
DataRow[] drs = dt.Select(string.Format("{0}={1}", strParentField, strParentID), strSortField); foreach (DataRow dr in drs)
{
tn = new TreeNode();
tn.Text = dr[strTextField].ToString();
tn.Value = dr[strValueField].ToString();
tn.NavigateUrl = string.Format("{0}?P={1}", strNavigate, dr[strValueField]);
tn.Target = strTarget;
tns.Add(tn); FillTree(dt, tn.ChildNodes, dr[strValueField].ToString(), strParentField, strSortField, strTextField, strValueField, strNavigate, strTarget);
}
}
using System.Data;
using System.Configuration;
using System.Collections;
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;public partial class word_admin_left : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
try
{
Class1 aa = new Class1();
string sql = "select * from tbTree";
SqlDataAdapter adp = aa.SQLDA(sql);
DataSet ds = new DataSet();
adp.Fill(ds);
this.ViewState["ds"] = ds;
}
catch (Exception ex)
{
Session["Error"] = ex.ToString();
Response.Redirect("error.aspx"); //?跳转程序的公共错误处理页面
}
//调用递归函数,完成树形结构的生成
if (!Page.IsPostBack)
{
AddTree(0, (TreeNode)null);
} } //递归添加树的节点
public void AddTree(int ParentID, TreeNode pNode)
{
DataSet ds = (DataSet)this.ViewState["ds"];
DataView dvTree = new DataView(ds.Tables[0]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[PARENTID] = " + ParentID; foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根节点
Node.Text = Row["name"].ToString();
TreeView1.Nodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(Row["id"].ToString()), Node); //再次递归
}
else
{ //?添加当前节点的子节点
Node.Text = Row["name"].ToString();
Node.NavigateUrl = Row["url"].ToString();
pNode.ChildNodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(Row["id"].ToString()), Node); //再次递归
}
}
}
}
protected SqlDataAdapter sda;
protected SqlCommand com;private Page_Load(object sender, System.EventArgs e)
{
con=new SqlConnection("Data Source=.;Initial Catalog=[Your DB Name];Integrated Security=True;user id=sa;password=");
sda=new SqlDataAdapter();
com=new SqlCommand();
com.Connection=con;
sda.SelectCommand=com;
AddToTreeView(null);//添加根节点}private void AddToTreeView(TreeNode n)
{
DataTable dt;
TreeNode tn; if (n == null)
{
sda.SelectCommand = "select * from [Table Name] where parentId is null";
}
else
{
sda.SelectCommand = "select * from [Table Name] where parentId="+tn.Value;
}
sda.Fill(dt);
foreach (DataRow r in dt.Rows)
{
tn = new TreeNode(r[2].ToString());
tn.Value = r[0].ToString();//把ID值放在Value属性里;
if (n == null)
{
this.TreeView1.Nodes.Add(tn);
}
else
{
n.ChildNodes.Add(tn);
}
AddToTree(tn);
}
}
你的方法还缺少个引用就是需要下载DataAccessApplicationBlock.msi安装包后并且添加下面的using Microsoft.ApplicationBlocks.Data;才可以