这是vb的代码,你看看吧
page_load()中
inittree(TreeView2.Nodes, 0)
Sub inittree(ByRef Nds As TreeNodeCollection, ByVal parentId As Integer) Dim strconn1 As String = "server=zhao;database=TreeNode;integrated security=sspi" Dim conn As New SqlConnection(strconn1)
conn.open()
'设置SelectCommand命令
Dim comm As New SqlDataAdapter("select * from node", conn) Dim mySet As New DataSet '填充数据集
comm.Fill(mySet, "node")
Dim dv As New DataView
Dim dvrow As DataRowView
Dim tmpNode As TreeNode
'intId为数值型变量,其作用是记录并传递当前记录的ID,做为它子节点的PARENTID值
Dim intId As Integer
dv.Table = mySet.Tables("node")
'parentId传递的是 additem函数中的intId.下面语句的作用是找出当前节点的子孩子集合。
dv.RowFilter = "father='" & parentId & "'"
'如果当前节点有孩子,则遍历所有的孩子,并调用递归函数。 For Each dvrow In dv
tmpNode = New TreeNode
'为当前节点的各个属性赋值。
tmpNode.ID = dvrow("id")
tmpNode.Text = dvrow("text")
intId = dvrow("id") inittree(tmpNode.Nodes, intId) '递归
'添加一个节点
Nds.Add(tmpNode)
'调用递归函数 Next conn.Close()
End Sub
page_load()中
inittree(TreeView2.Nodes, 0)
Sub inittree(ByRef Nds As TreeNodeCollection, ByVal parentId As Integer) Dim strconn1 As String = "server=zhao;database=TreeNode;integrated security=sspi" Dim conn As New SqlConnection(strconn1)
conn.open()
'设置SelectCommand命令
Dim comm As New SqlDataAdapter("select * from node", conn) Dim mySet As New DataSet '填充数据集
comm.Fill(mySet, "node")
Dim dv As New DataView
Dim dvrow As DataRowView
Dim tmpNode As TreeNode
'intId为数值型变量,其作用是记录并传递当前记录的ID,做为它子节点的PARENTID值
Dim intId As Integer
dv.Table = mySet.Tables("node")
'parentId传递的是 additem函数中的intId.下面语句的作用是找出当前节点的子孩子集合。
dv.RowFilter = "father='" & parentId & "'"
'如果当前节点有孩子,则遍历所有的孩子,并调用递归函数。 For Each dvrow In dv
tmpNode = New TreeNode
'为当前节点的各个属性赋值。
tmpNode.ID = dvrow("id")
tmpNode.Text = dvrow("text")
intId = dvrow("id") inittree(tmpNode.Nodes, intId) '递归
'添加一个节点
Nds.Add(tmpNode)
'调用递归函数 Next conn.Close()
End Sub
然后递归填充
//
private DataSet CreateDataSet(string powers)
{
sql="select * from powers where pow_no IN("+powers+") and pow_station=1 ORDER BY pow_no ASC";
cmd=new SqlDataAdapter(sql,con.conn);
ds=new DataSet();
cmd.Fill(ds,"tree");
return ds;
} private void inittree(TreeNodeCollection Nds,string parentid)
{
DataView dv = new DataView();
TreeNode tmpnd;
string intid;
dv.Table=ds.Tables["tree"];
dv.RowFilter="pow_ParentId='"+parentid+"'";
foreach(DataRowView drv in dv)
{
tmpnd= new TreeNode();
tmpnd.ID=drv["pow_no"].ToString();
tmpnd.Text=drv["pow_name"].ToString();
tmpnd.ImageUrl=drv["pow_icon"].ToString();
tmpnd.NavigateUrl="../main.aspx?"+con.DESEncrypt((drv["pow_url"].ToString()+"|"+drv["pow_no"].ToString()),Session["sta_perkey"].ToString());
tmpnd.Target="rightFrm";
Nds.Add(tmpnd);
intid=drv["pow_parentid"].ToString();
inittree(tmpnd.Nodes,tmpnd.ID);
}
}
给你一个我的例子 Private Sub LoadNode(ByRef treeview As Microsoft.Web.UI.WebControls.TreeView, ByRef tvwNode As Microsoft.Web.UI.WebControls.TreeNode, ByVal strsql As String, ByVal strJH As String)
'使用递归的方法生成目录树
Dim cnn As New OracleConnection(G_strCnn)
Dim rd As OracleDataReader
Dim cmd As New OracleCommand(strsql, cnn)
Dim strsubsql As String
Try
cnn.Open()
rd = cmd.ExecuteReader
While rd.Read
Dim trvsubNode As New Microsoft.Web.UI.WebControls.TreeNode
trvsubNode.NodeData = rd.Item("NODEID") & ""
If Not (rd.IsDBNull(6)) Then
trvsubNode.ExpandedImageUrl = "../" & rd.Item("NODEEXPIMAGE")
End If
trvsubNode.DefaultStyle.Add("color", "#ffffff")
trvsubNode.Text = rd.Item("NODETEXT") & ""
If (rd.IsDBNull(2)) Then
' trvsubNode.ImageUrl = "images/homepage/menu/movearrow01.gif"
Else
trvsubNode.ImageUrl = "../" & rd.Item("NODEIMAGE") & ""
End If
If rd.IsDBNull(4) Then
trvsubNode.Target = "main"
Else
trvsubNode.Target = rd.Item("NODETARGETTYPE") & ""
End If
If Not rd.IsDBNull(3) Then
trvsubNode.NavigateUrl = rd.Item("NODETARGET") & strJH
End If Try
If tvwNode Is Nothing Then
treeview.Nodes.Add(trvsubNode)
Else
tvwNode.Nodes.Add(trvsubNode)
End If
Catch ex As Exception End Try
strsubsql = "Select NODEID,NODETEXT,NODEIMAGE,NODETARGET,NODETARGETTYPE,ZYPARENTNODEID,NODEEXPIMAGE,nodetype,nodevisible,NODESY From JSYS_101A Where NODEVISIBLE<>0 and ZYPARENTNODEID='" & rd.Item("NODEID") & "' order by ZYNODESORTE "
Call LoadNode(treeview, trvsubNode, strsubsql, strJH)
End While
Catch ex As Exception
Response.Write(ex.ToString)
Finally
cmd.Dispose()
rd.Close()
rd.Dispose()
cnn.Close()
cnn.Dispose()
End Try
End Sub
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Web.UI.WebControls;
using System.Data.SqlClient;namespace treeview
{
/// <summary>
/// treeview 的摘要说明。
/// </summary>
public class treeview : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
private void Page_Load(object sender, System.EventArgs e)
{
if (Page.IsPostBack) { if (Request.Form["Isdbclick"].ToString()=="true") { trvModel_DblClick(); } } //第一次调用时候绑定数据
if(!Page.IsPostBack)
{
BindDataToTree();
}
} public void BindDataToTree()
{
// 定义数据库连接
SqlConnection CN = new SqlConnection();
try
{
//初始化连接字符串
CN.ConnectionString= "data source=db;initial catalog=treeview;persist security info=False;user id=sa;Password=retia;";
CN.Open(); SqlDataAdapter adp = new SqlDataAdapter("select * from tbTree",CN);
DataSet ds=new DataSet();
adp.Fill(ds);
this.ViewState["ds"]=ds; }
catch (Exception ex)
{
this.Response.Write("<script language=javascript>alert('" + ex.Message + "');</script>");
// Session["Error"] = ex.ToString();
// Response.Redirect("error.aspx"); //跳转程序的公共错误处理页面
}
finally
{
CN.Close();
}
//调用递归函数,完成树形结构的生成
AddTree(0, (TreeNode)null);
} public void trvModel_DblClick()
{
//做自己想做的事情。。^_^
this.Response.Write("<script language=javascript>alert('hello!');</script>");
} // 递归添加树的节点
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["ConText"].ToString();
TreeView1.Nodes.Add(Node);
Node.Expanded=false;
AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归
}
else
{ //添加当前节点的子节点
Node.Text = Row["ConText"].ToString();
pNode.Nodes.Add(Node);
Node.NavigateUrl=Row["url"].ToString();
Node.Expanded = false;
Node.Target = "fraContent";
AddTree(Int32.Parse(Row["ID"].ToString()),Node); //再次递归
}
}
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}
drop table [dbo].[tbTree]
GOCREATE TABLE [dbo].[tbTree] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Context] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[ParentID] [int] NULL ,
[url] [nvarchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO