Dim myDataSet As New DataSet myAdapter.Fill(myDataSet, "treetable") Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim myDataSet As New DataSet myAdapter.Fill(myDataSet, "treetable") inittree(myDataSet.Tables("treetable"),TreeView1.Nodes, 999) End Sub Private Sub inittree(ByRef tb As datatable,ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal Parentid As Integer) Dim dv As New DataView Dim dvrow As DataRowView Dim tmpNode As New Microsoft.Web.UI.WebControls.TreeNode Dim intid As Integer dv.Table = tb dv.RowFilter = "Parentid = " & Parentid & "" For Each dvrow In dv tmpNode.ID = dvrow("Nodeid") tmpNode.Text = dvrow("Nodename") 'tmpNode.NavigateUrl = dvrow("Address") intid = dvrow("Parentid") Nds.Add(tmpNode) inittree(tb,Nds(Nds.Count - 1).Nodes, intid) Next End Sub
1、用代码在treeview web控件中,添加node的方法表字段:编号,父编号,名称 数据: 1 0 中华人民共和国 2 1 湖南 3 1 湖北 void creattree(string text,TreeNode tnd,string pid) { TreeNode t2=new TreeNode(); t2.Text=text; tnd.Nodes.Add(t2);生成 string str1 ="父编号 = '"+pid+"'"; DataRow[] dryl = dataSet31.Tables [0].Select(str1); for(int i=0;i<=dryl.GetUpperBound(0);i++) {creattree(dryl[i][2].ToString(),t2,dryl[i][0].ToString()); } } // TreeNode t1=new TreeNode(); t1.Text="地区信息"; TreeView2.Nodes.Add(t1); creattree("中华人民共和国",t1,"1"); 2、如何为TreeView添加事件?Private Sub TreeView1_indexChanged(ByVal sender As Object, ByVal e As Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) Handles TreeView1.SelectedIndexChange Dim a As Integer a = TreeView1.SelectedNodeIndex TextBox1.Text = CStr(a) End Sub 但是AutoPostBack设置为True的话,TreeView还要刷新,闪烁,我的TreeView比较庞大 ,这可怎么办???苦恼中3、为什么TreeView 中的SelectedIndexChange为什么不执行???AutoPostBack属性为真,SelectedIndexChange才能被执行。 不过这样的话你选择时会感到刷新得让你痛苦,根据你的具体实现的目的,采用变通的 方法,尽量不使用SelectedIndexChange事件吧。 selectedindexchange事件挂到控件上没有? InitializeComponent方法中检查检查4、如何判断 TreeView 的一个节点下是否有子节点???if(selNode.Nodes.Count==0){ //该节点没有字节点 }5、如何得到 TreeView 的当前选择节点??? 1.Tree.GetNodeFromIndex(Tree.SelectedNodeIndex.ToString()) 2.private void TreeView1_SelectedIndexChange(object sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e) e.NewNode即为所选节点6、treeview实现两层节点没问题,扩展到无限层就出问题了?我的那个做法还不够完善,对于节点数较少的情况可以这样做,对于节点数较多的情况 ,你就不能这样做了,你应该只加载一级,当点击节点展开时,再加载它的下一级子节 点。 数据库结构如下: 表名:Table1 ParentID varchar 20:父节点 ID varchar 20:节点 Name varchar 50:名称来来来,这里给你个例程,再给个我的网页上的TreeViwe看看,一万个子节点都没问题 。 http://dev1.eraserver.net/czc888/webform1.aspx 至于那三个图象的意义你看我的网页就知道了。分别表示一页纸(没有子节点)、一本 关闭的书(有子节点),一本打开的书(当前节点被展开) void creat_node(string name,Microsoft.Web.UI.WebControls.TreeNode t1,string number) { //定义一个新的结点 Microsoft.Web.UI.WebControls.TreeNode t2=new Microsoft.Web.UI.WebControls.TreeNode(); t2.ID=number; t2.Text=name; //判断是否为根结点 TreeView1.ExpandedImageUrl="images/Depart03.bmp"; if(t1.ID.Trim()=="###") { TreeView1.Nodes.Add(t2); t2.ImageUrl="images/Depart01.bmp"; } else { t1.Nodes.Add(t2); t2.ImageUrl="images/Depart01.bmp"; t1.ImageUrl="images/Depart02.bmp"; } //取得这个结点的所有子结点,利用递归自动生成 string mySelectQuery = "SELECT ParentID, ID,Name FROM table1 where ParentID='" + number +"'"; string MyConnString="provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath(".")+"/dt/mydata.mdb"; OleDbConnection myConnection = new OleDbConnection(MyConnString); OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection); myConnection.Open(); OleDbDataReader myReader; myReader = myCommand.ExecuteReader(); while (myReader.Read()) { creat_node(myReader.GetString(2),t2,myReader.GetString(1)); } myReader.Close(); myConnection.Close(); } private void CreateProviderTreeBtn_Click(object sender, System.EventArgs e) { Microsoft.Web.UI.WebControls.TreeNode t1=new Microsoft.Web.UI.WebControls.TreeNode(); creat_node("",t1,"###");7、怎样使用TreeView???//初始化TreeView数据 private void InitTV(int intVOrderLen) { SqlDataReader dr; SqlCommand myCommand; string strSel = "select * from bas_enterprise where len(vieworder)="+intVOrderLen+" order by vieworder"; myCommand = new SqlCommand (strSel, myConnection); dr=myCommand.ExecuteReader(); while (dr.Read ()) { TreeNode pNode=new TreeNode (); pNode.Text =dr["EntpName"].ToString (); pNode.ID =dr["ViewOrder"].ToString (); TreeView1.Nodes .Add (pNode); } dr.Close (); } private void TreeView1_SelectedIndexChange(object sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e) { TreeNode NewNode=TreeView1.GetNodeFromIndex (TreeView1.SelectedNodeIndex); string strNodeId=NewNode.ID .ToString (); SqlDataReader dr; SqlCommand myCommand; int intVOrderLen=strNodeId.Length+2; string strSel = "select * from bas_enterprise where len(vieworder)="+intVOrderLen+" and vieworder like '%"+strNodeId+"__%' order by vieworder"; myCommand = new SqlCommand (strSel, myConnection); dr=myCommand.ExecuteReader(); NewNode.Nodes .Clear(); while (dr.Read ()) { TreeNode pNode=new TreeNode (); pNode.Text =dr["EntpName"].ToString (); pNode.ID =dr["ViewOrder"].ToString (); NewNode.Nodes.Add (pNode); } dr.Close (); TreeView1.ExpandLevel=1; } 8、在treeview中如何查找一个值,并选中它?问题: 各位,在已经建好的树中如何查找一个文本或者是treenodes的id,找到后选中它?答案: for(int i=0;i<TreeView1.Nodes.Count;i++) if(TreeView1.Nodes[i]==TextBox1.Text) { string index1=TreeView1.Nodes[i].GetNodeIndex();//取得index TreeView1.SelectedNodeIndex=index1; }9、如何取得TreeView中各项的值?? private void TreeView1_SelectedIndexChange(object sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e) { Microsoft.Web.UI.WebControls.TreeNode NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex); Label1.Text =NewNo
Private Sub inittree(ByRef tb As datatable,ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal Parentid As Integer) Dim dv As New DataView Dim dvrow As DataRowView Dim tmpNode As New Microsoft.Web.UI.WebControls.TreeNode Dim intid As Integer dv.Table = tb dv.RowFilter = "Parentid = " & Parentid & "" For Each dvrow In dv tmpNode.ID = dvrow("Nodeid") tmpNode.Text = dvrow("Nodename") 'tmpNode.NavigateUrl = dvrow("Address") intid = dvrow("Parentid") Nds.Add(tmpNode) inittree(tb,Nds(Nds.Count - 1).Nodes, intid) Next End Sub 在inittree函数中调用inittree函数,可能是这里除了问题。
Private Sub inittree(ByRef tb As datatable,ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal Parentid As Integer) Dim dv As New DataView Dim dvrow As DataRowView Dim tmpNode As New Microsoft.Web.UI.WebControls.TreeNode Dim intid As Integer dv.Table = tb dv.RowFilter = "Parentid = " & Parentid & "" For Each dvrow In dv tmpNode.ID = dvrow("Nodeid") tmpNode.Text = dvrow("Nodename") 'tmpNode.NavigateUrl = dvrow("Address") intid = dvrow("Parentid") Nds.Add(tmpNode) inittree(tb,Nds(Nds.Count - 1).Nodes, intid) Next End Sub 在inittree函数中调用inittree函数,可能是这里除了问题。
myAdapter.Fill(myDataSet, "treetable")
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim myDataSet As New DataSet
myAdapter.Fill(myDataSet, "treetable")
inittree(myDataSet.Tables("treetable"),TreeView1.Nodes, 999)
End Sub
Private Sub inittree(ByRef tb As datatable,ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal Parentid As Integer)
Dim dv As New DataView
Dim dvrow As DataRowView
Dim tmpNode As New Microsoft.Web.UI.WebControls.TreeNode
Dim intid As Integer
dv.Table = tb
dv.RowFilter = "Parentid = " & Parentid & ""
For Each dvrow In dv tmpNode.ID = dvrow("Nodeid")
tmpNode.Text = dvrow("Nodename")
'tmpNode.NavigateUrl = dvrow("Address")
intid = dvrow("Parentid")
Nds.Add(tmpNode)
inittree(tb,Nds(Nds.Count - 1).Nodes, intid)
Next
End Sub
数据:
1 0 中华人民共和国
2 1 湖南
3 1 湖北 void creattree(string text,TreeNode tnd,string pid)
{ TreeNode t2=new TreeNode();
t2.Text=text; tnd.Nodes.Add(t2);生成
string str1 ="父编号 = '"+pid+"'";
DataRow[] dryl = dataSet31.Tables [0].Select(str1); for(int i=0;i<=dryl.GetUpperBound(0);i++)
{creattree(dryl[i][2].ToString(),t2,dryl[i][0].ToString());
}
}
//
TreeNode t1=new TreeNode();
t1.Text="地区信息";
TreeView2.Nodes.Add(t1); creattree("中华人民共和国",t1,"1");
2、如何为TreeView添加事件?Private Sub TreeView1_indexChanged(ByVal sender As Object, ByVal e As
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) Handles
TreeView1.SelectedIndexChange
Dim a As Integer
a = TreeView1.SelectedNodeIndex
TextBox1.Text = CStr(a)
End Sub
但是AutoPostBack设置为True的话,TreeView还要刷新,闪烁,我的TreeView比较庞大
,这可怎么办???苦恼中3、为什么TreeView 中的SelectedIndexChange为什么不执行???AutoPostBack属性为真,SelectedIndexChange才能被执行。
不过这样的话你选择时会感到刷新得让你痛苦,根据你的具体实现的目的,采用变通的
方法,尽量不使用SelectedIndexChange事件吧。
selectedindexchange事件挂到控件上没有?
InitializeComponent方法中检查检查4、如何判断 TreeView 的一个节点下是否有子节点???if(selNode.Nodes.Count==0){
//该节点没有字节点
}5、如何得到 TreeView 的当前选择节点??? 1.Tree.GetNodeFromIndex(Tree.SelectedNodeIndex.ToString())
2.private void TreeView1_SelectedIndexChange(object sender,
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
e.NewNode即为所选节点6、treeview实现两层节点没问题,扩展到无限层就出问题了?我的那个做法还不够完善,对于节点数较少的情况可以这样做,对于节点数较多的情况
,你就不能这样做了,你应该只加载一级,当点击节点展开时,再加载它的下一级子节
点。
数据库结构如下:
表名:Table1
ParentID varchar 20:父节点
ID varchar 20:节点
Name varchar 50:名称来来来,这里给你个例程,再给个我的网页上的TreeViwe看看,一万个子节点都没问题
。
http://dev1.eraserver.net/czc888/webform1.aspx
至于那三个图象的意义你看我的网页就知道了。分别表示一页纸(没有子节点)、一本
关闭的书(有子节点),一本打开的书(当前节点被展开) void creat_node(string
name,Microsoft.Web.UI.WebControls.TreeNode t1,string number)
{
//定义一个新的结点 Microsoft.Web.UI.WebControls.TreeNode t2=new
Microsoft.Web.UI.WebControls.TreeNode();
t2.ID=number;
t2.Text=name;
//判断是否为根结点
TreeView1.ExpandedImageUrl="images/Depart03.bmp";
if(t1.ID.Trim()=="###")
{
TreeView1.Nodes.Add(t2);
t2.ImageUrl="images/Depart01.bmp";
}
else
{
t1.Nodes.Add(t2);
t2.ImageUrl="images/Depart01.bmp";
t1.ImageUrl="images/Depart02.bmp";
}
//取得这个结点的所有子结点,利用递归自动生成
string mySelectQuery = "SELECT ParentID, ID,Name FROM table1
where ParentID='" + number +"'";
string MyConnString="provider=Microsoft.Jet.OLEDB.4.0;Data
Source="+Server.MapPath(".")+"/dt/mydata.mdb";
OleDbConnection myConnection = new
OleDbConnection(MyConnString);
OleDbCommand myCommand = new
OleDbCommand(mySelectQuery,myConnection);
myConnection.Open();
OleDbDataReader myReader;
myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
creat_node(myReader.GetString(2),t2,myReader.GetString(1)); }
myReader.Close();
myConnection.Close(); } private void CreateProviderTreeBtn_Click(object sender,
System.EventArgs e)
{
Microsoft.Web.UI.WebControls.TreeNode t1=new
Microsoft.Web.UI.WebControls.TreeNode();
creat_node("",t1,"###");7、怎样使用TreeView???//初始化TreeView数据
private void InitTV(int intVOrderLen)
{
SqlDataReader dr;
SqlCommand myCommand;
string strSel = "select * from bas_enterprise where
len(vieworder)="+intVOrderLen+" order by vieworder";
myCommand = new SqlCommand (strSel, myConnection);
dr=myCommand.ExecuteReader();
while (dr.Read ())
{
TreeNode pNode=new TreeNode ();
pNode.Text =dr["EntpName"].ToString ();
pNode.ID =dr["ViewOrder"].ToString ();
TreeView1.Nodes .Add (pNode); }
dr.Close (); }
private void TreeView1_SelectedIndexChange(object sender,
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
TreeNode NewNode=TreeView1.GetNodeFromIndex
(TreeView1.SelectedNodeIndex);
string strNodeId=NewNode.ID .ToString ();
SqlDataReader dr;
SqlCommand myCommand;
int intVOrderLen=strNodeId.Length+2;
string strSel = "select * from bas_enterprise where
len(vieworder)="+intVOrderLen+" and vieworder like '%"+strNodeId+"__%'
order by vieworder";
myCommand = new SqlCommand (strSel, myConnection);
dr=myCommand.ExecuteReader();
NewNode.Nodes .Clear();
while (dr.Read ())
{
TreeNode pNode=new TreeNode ();
pNode.Text =dr["EntpName"].ToString ();
pNode.ID =dr["ViewOrder"].ToString ();
NewNode.Nodes.Add (pNode);
}
dr.Close ();
TreeView1.ExpandLevel=1;
}
8、在treeview中如何查找一个值,并选中它?问题:
各位,在已经建好的树中如何查找一个文本或者是treenodes的id,找到后选中它?答案:
for(int i=0;i<TreeView1.Nodes.Count;i++)
if(TreeView1.Nodes[i]==TextBox1.Text)
{
string index1=TreeView1.Nodes[i].GetNodeIndex();//取得index
TreeView1.SelectedNodeIndex=index1;
}9、如何取得TreeView中各项的值?? private void TreeView1_SelectedIndexChange(object sender,
Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
Microsoft.Web.UI.WebControls.TreeNode
NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);
Label1.Text =NewNo
Dim dv As New DataView
Dim dvrow As DataRowView
Dim tmpNode As New Microsoft.Web.UI.WebControls.TreeNode
Dim intid As Integer
dv.Table = tb
dv.RowFilter = "Parentid = " & Parentid & ""
For Each dvrow In dv tmpNode.ID = dvrow("Nodeid")
tmpNode.Text = dvrow("Nodename")
'tmpNode.NavigateUrl = dvrow("Address")
intid = dvrow("Parentid")
Nds.Add(tmpNode)
inittree(tb,Nds(Nds.Count - 1).Nodes, intid)
Next
End Sub
在inittree函数中调用inittree函数,可能是这里除了问题。
Private Sub inittree(ByRef tb As datatable,ByRef Nds As Microsoft.Web.UI.WebControls.TreeNodeCollection, ByVal Parentid As Integer)
Dim dv As New DataView
Dim dvrow As DataRowView
Dim tmpNode As New Microsoft.Web.UI.WebControls.TreeNode
Dim intid As Integer
dv.Table = tb
dv.RowFilter = "Parentid = " & Parentid & ""
For Each dvrow In dv tmpNode.ID = dvrow("Nodeid")
tmpNode.Text = dvrow("Nodename")
'tmpNode.NavigateUrl = dvrow("Address")
intid = dvrow("Parentid")
Nds.Add(tmpNode)
inittree(tb,Nds(Nds.Count - 1).Nodes, intid)
Next
End Sub
在inittree函数中调用inittree函数,可能是这里除了问题。