給你一段我曾經(jīng)寫的代碼,主要是生成TreeView的節(jié)點!有什么不懂的地方你就提!
曲沃ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
Public Sub InitializeTreeView(ByVal strvXL As TreeView, ByVal vrsRecordTwo As DataSet)
Dim treBaseNodeOne As TreeNode
Dim treBaseNodeTwo As TreeNode
Dim strDWDM As String
m_rsRecordTwo = g_clsSybase.SelectSC_PD_SBCSB1()
'查找供電局信息
g_clsSybase.SelectRS_ZZJG_ZZJGDMB(m_rsRecordOne)
'添加根節(jié)點
Do While m_rsRecordOne.Read
strDWDM = m_rsRecordOne.GetString(0) '獲取單位代碼
treBaseNodeOne = New TreeNode
treBaseNodeOne.Text = m_rsRecordOne.GetString(1).Trim() '獲取單位名稱
treBaseNodeOne.Name = m_rsRecordOne.GetString(1)
treBaseNodeOne.Tag = ""
strvXL.Nodes.Add(treBaseNodeOne)
'添加樹結構第二層
Dim drsTwo() As DataRow
drsTwo = m_rsRecordTwo.Tables(0).Select("SSDW='" strDWDM "' and SC__XLBM is null")
For Each dr As DataRow In drsTwo
treBaseNodeTwo = New TreeNode
treBaseNodeTwo.Text = dr.Item("XLMC").ToString.Trim
treBaseNodeTwo.Name = dr.Item("XLMC")
treBaseNodeTwo.Tag = dr.Item("XLBM")
treBaseNodeOne.Nodes.Add(treBaseNodeTwo)
Next
Loop
m_rsRecordOne.Close()
End Sub
我不會vb,我自己用C#寫了一個,簡單草參考一下吧:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.Page.SmartNavigation = true;
conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
conn.Open();
da = new SqlDataAdapter(@"select * from types", conn);
ds = new DataSet();
da.Fill(ds, "tree");
AddTree(0, (TreeNode)null);
conn.Close();
}
}
private void AddTree(int ParentID,TreeNode pNode)
{
DataView dvTree = new DataView(ds.Tables[0]);
//過濾ParentID,得到當前的所有子節(jié)點
dvTree.RowFilter = "[ParentID] = " + ParentID;
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根節(jié)點
Node.Text = Row["type"].ToString();
maplist.Nodes.Add(Node);
Node.Expanded = false;
AddTree(Int32.Parse(Row["TID"].ToString()), Node); //再次遞歸
}
else
{ //添加當前節(jié)點的子節(jié)點
Node.Text = Row["type"].ToString();
pNode.ChildNodes.Add(Node);
Node.Expanded = false;
AddTree(Int32.Parse(Row["TID"].ToString()), Node); //再次遞歸
}
}
}
Public?Class?Form1
Dim?node(5)?As?TreeNode
Private?Sub?Form1_Load(sender?As?System.Object,?e?As?System.EventArgs)?Handles?MyBase.Load
? Dim?root?As?TreeNode
? With?TreeView1
? ? ? .Nodes.Clear()
? ? ? .ShowLines?=?True
? ? ? .ShowPlusMinus?=?True
? ? ? .ShowRootLines?=?True
? ? ? root?=?.Nodes.Add("倉庫")?'增加根節(jié)點
? ? ? .SelectedNode?=?root? '在此根節(jié)點下添加子節(jié)點
? ? ? For?i?=?1?To?6
? ? ? ? ? node(i?-?1)?=?.SelectedNode.Nodes.Add(i.ToString??"號倉庫")
? ? ? Next
? ? ? .ExpandAll()
? End?With
End?Sub
Private?Sub?Button1_Click(sender?As?System.Object,?e?As?System.EventArgs)?Handles?Button1.Click
? If?Val(TextBox1.Text)?=?100?And?Val(TextBox1.Text)?=?699?Then
? ? ? node(Val(TextBox1.Text)?\?100?-?1).Nodes.Add(TextBox1.Text)
? End?If
End?Sub
Private?Sub?Button2_Click(sender?As?System.Object,?e?As?System.EventArgs)?Handles?Button2.Click
? If?Val(TextBox2.Text)?=?1000000?And?Val(TextBox2.Text)?=?6999999?Then
? ? ? For?Each?child?As?TreeNode?In?node(Val(TextBox2.Text)?\?1000000?-?1).Nodes
? ? ? ? ? If?child.Text?=?TextBox2.Text.Substring(1,?3)?Then
? ? ? ? ? ? ? child.Nodes.Add(TextBox2.Text)
? ? ? ? ? ? ? Exit?For
? ? ? ? ? End?If
? ? ? Next
? End?If
End?Sub
End?Class
Nodes 集合包含分配給 TreeView 控件的所有 TreeNode 對象。此集合中的樹節(jié)點稱作根樹節(jié)點。隨后添加到根樹節(jié)點上的任何樹節(jié)點稱作子節(jié)點。由于每個 TreeNode 都可以包含其他 TreeNode 對象的集合,您可能會在循環(huán)訪問集合時覺得很難確定自己在樹結構中的位置。您可以使用 PathSeparator 字符串值來分析 TreeNode.FullPath 字符串,以確定 TreeNode 標簽的起始和終止位置。
可以在樹節(jié)點旁顯示圖像,方法是將一個 ImageList 分配給 ImageList 屬性,然后通過引用 Image 在 ImageList 中的索引值來分配該 Image。使用下面的屬性分配圖像:
將 ImageIndex 屬性設置為當樹節(jié)點未選定時所顯示的 Image 的索引值。
將 SelectedImageIndex 屬性設置為當樹節(jié)點被選定時要顯示的 Image 的索引值。
ImageIndex 和 SelectedImageIndex 屬性值所引用的圖像是所有分配給 Nodes 集合的樹節(jié)點顯示的默認圖像。每個樹節(jié)點都可以通過設置 TreeNode.ImageIndex 和 TreeNode.SelectedImageIndex 屬性來取代默認的圖像。
樹節(jié)點可以展開,以顯示下一級子樹節(jié)點。用戶可以在 TreeNode 旁顯示加號 (+) 按鈕時通過單擊加號 (+) 按鈕來展開 TreeNode,或者可以通過調(diào)用 TreeNode.Expand 方法來展開 TreeNode。若要展開 Nodes 集合中的所有子樹節(jié)點級別,請調(diào)用 ExpandAll 方法。若要折疊子 TreeNode 級別,可以調(diào)用 TreeNode.Collapse 方法,也可以在 TreeNode 旁顯示減號 (-) 按鈕時按減號 (-) 按鈕。還可以通過調(diào)用 TreeNode.Toggle 方法在展開和折疊狀態(tài)之間切換。
樹節(jié)點可以選擇性地顯示復選框。若要顯示復選框,請將 TreeView 的 CheckBoxes 屬性設置為 true。對于處于選中狀態(tài)的樹節(jié)點,Checked 屬性設置為 true。
注意
從 BeforeCheck 或 AfterCheck 事件內(nèi)設置 TreeNode.Checked 屬性將導致該事件被多次引發(fā)并可能產(chǎn)生意外行為。例如,您可以在遞歸更新子節(jié)點時在事件處理程序中設置 Checked 屬性,以便用戶不必逐個展開并選中每個節(jié)點。如果未將 TreeViewEventArgs 的 Action 屬性設置為 TreeViewAction.Unknown,則若要防止該事件被多次引發(fā),需為僅執(zhí)行遞歸代碼的事件處理程序添加邏輯。有關如何進行此操作的示例,請參見 AfterCheck 或 BeforeCheck 事件的示例部分。
通過設置 TreeView 控件的一些顯示和樣式屬性,可以更改此控件的外觀。如果將 ShowPlusMinus 設置為 true,則會分別在每個可展開或折疊的 TreeNode 旁顯示加號或減號按鈕。如果將 ShowRootLines 屬性設置為 true,TreeView 則會顯示聯(lián)接所有根樹節(jié)點之間的連線。通過將 ShowLines 屬性設置為 true,可以顯示子樹節(jié)點與其根節(jié)點之間的連線。如果將 HotTracking 屬性設置為 true,那么當鼠標指針移過樹節(jié)點標簽時,樹節(jié)點標簽的外觀將發(fā)生變化。如果啟用熱跟蹤,樹節(jié)點標簽將具有超鏈接的外觀。也可以完全自定義 TreeView 控件的外觀。若要執(zhí)行此操作,請將 DrawMode 屬性設置為 TreeViewDrawMode.Normal 以外的值并處理 DrawNode 事件。
注意
在運行時設置 CheckBoxes、Scrollable、ImageIndex 和 SelectedImageIndex 屬性時,將重新創(chuàng)建 TreeView 句柄(請參見 Control.RecreateHandle)以更新控件的外觀。這將折疊除選定的 TreeNode 之外的所有樹節(jié)點。
下面的代碼示例闡釋了如何使用 TreeView 控件。
Private Sub InitializeTreeView()
treeView1.BeginUpdate()
treeView1.Nodes.Add("Parent")
treeView1.Nodes(0).Nodes.Add("Child 1")
treeView1.Nodes(0).Nodes.Add("Child 2")
treeView1.Nodes(0).Nodes(1).Nodes.Add("Grandchild")
treeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.Add("Great Grandchild")
treeView1.EndUpdate()
End Sub
From MSDN