Henry手記-VB.NET中動態載入Treeview節點(一)
Henry手記-VB.NET中動態載入Treeview節點(一)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
韓睿(2003.4.13)
Treeview是一個重要的控制元件,無論是在VB.NET,C#還是Delphi、VC++等各種語言中,都充當了導航器的作用。在實際工作中,很多情況下需要將Treeview與資料庫進行連線,以填充其節點。然而,往往由於資料庫資料眾多,一次性灌入所有的根節點與子節點,會耗用大量的起始等待時間。解決的方案,應該是動態載入節點,起始的時候,只加載根節點,在點選某個根節點時,才載入其子節點,再點選某個子節點時,才載入子節點的子節點,以此類推,這樣的處理方法可以達到提高工作效率,節省訪問時間的妙用。
本文僅以VB.NET為例,說明此方法的使用。其它的程式語言,可以進行仿效,或者給筆者寫信。
首先應該有個資料庫,用以儲存資料結構與資料。本文需要的資料庫為一個Project.mdb。其結構為(為清楚起見,以漢字欄位為例,實際應用時,請自行更改):
表名:根節點
欄位 |
型別 |
大小 |
主鍵 |
根節點編號 |
文字 |
10 |
Y |
根節點名稱 |
文字 |
10 |
表名:第一級子節點
欄位 |
型別 |
大小 |
主鍵 |
根節點編號 |
文字 |
10 |
Y |
第一級子節點編號 |
文字 |
10 |
Y聯合主鍵 |
第一級子節點名稱 |
文字 |
10 |
表名:第二級子節點
欄位 |
型別 |
大小 |
主鍵 |
第一級子節點編號 |
文字 |
10 |
Y |
第二級子節點編號 |
文字 |
10 |
Y聯合主鍵 |
第二級子節點名稱 |
文字 |
10 |
三個表的關係已經很清楚了,在此不再羅列。表內填充的資料為:
根節點編號為1、2、3這樣類推,其名稱也就為根節點1、根節點2、根節點3
第一級子節點編號規則為:根節點1之下的子節點編號為11、12、13等以此類推,根節點2之下的子節點編號為21、22……子節點名稱為:子節點1、子節點2……
第二級子節點編號規則為:第一級子節點ij之下的第二級子節點的編號為ij1、ij2……,其名稱為統一的:孫節點1、孫節點2……
現在讓我們簡單分析一下treeview的結構(筆者準備在另文專門剖析一下Treeview的結構,以方便有興趣的網友進行高階應用)
Treeview是由節點TreeNode組成的,第一級的稱之為根節點TreeRoot,在根節點之下一級的稱之為某個根節點的子節點TreeLeaf,某個子節點之下一級的子節點就稱為該子節點的子節點。第個節點有兩個標識方式,一個是它的Text,即顯示出來的內容;另一個是它的Tag屬性,一般用唯一標識碼對其進行標識,以用於在使用時對節點的識別。在本文中,也主要用Text屬性來顯示節點的名稱欄位,用Tag屬性來顯示節點的編號屬性。(節點編號被設為主鍵,也就是唯一的標識了)
1.載入根節點
好了,我們該開始在VB.NET中進行演練了!第一步,當然是看看怎麼在窗體起始的時候載入根節點:
'定義公用變數
Dim myconnection As New OleDb.OleDbConnection()
Dim MyAdapater As New OleDb.OleDbDataAdapter()
Dim mycommand As New OleDb.OleDbCommand()
Dim ds As New DataSet()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'載入根節點表至treeview中,作為第一級
myconnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "/project.mdb"'資料庫連線請自行更換
mycommand.CommandText = "SELECT 根節點編號,根節點名稱 FROM 根節點"
mycommand.Connection = myconnection
Try
myconnection.Close()
myconnection.Open()
Dim mysqlreader As OleDb.OleDbDataReader = mycommand.ExecuteReader
TreeView1.Nodes.Clear()
While mysqlreader.Read()
Dim tree_root As New TreeNode()
tree_root.Tag = mysqlreader.GetString(0) '把編號放入tag中
tree_root.Text = mysqlreader.GetString(1) '樹上顯示的是根節點名稱
'請根據你資料庫欄位的型別來決定是否用getstring或其它型別
TreeView1.Nodes.Add(tree_root)
End While
Catch ex As Exception
MessageBox.Show(ex.ToString, "資料表根節點載入錯誤", vbOKOnly)
Finally
myconnection.Close()
End Try
TreeView1.ExpandAll()
TreeView1.Select()
End Sub
好了,現在執行一下程式,你可以看到如圖1所示的起始介面
----
宣告:本文版權與解釋權歸韓睿所有,如需轉載,請保留完整的內容及此宣告。
QQ: 18349592
相關推薦
Henry手記-VB.NET中動態載入Treeview節點(一)
Henry手記-VB.NET中動態載入Treeview節點(一)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 韓
Unity 動態載入與記憶體(一)
Unity裡有兩種動態載入機制:一是Resources.Load,一是通過AssetBundle,其實兩者本質上我理解沒有什麼區別。Resources.Load就是從一個預設打程序序包裡的AssetBundle里加載資源,而一般AssetBundle檔案需要你自己建立,執行
vb.net如何編寫高效率的SQLHelper(一)基礎篇
基礎知識儲備: 1、什麼是ADO.NET? MSDN 官方答:ADO.NET 是一組向 .NET Framework 程式設計師公開資料訪問服務的類。ADO.NET 類位於 System.Dat
VB.NET實現動態載入控制元件陣列
vb.net中沒有控制元件陣列,它也不主張用控制元件陣列,因為它對記憶體的開銷非常大。控制元件陣列問題在.NET中完全有其它方法代替。如果一定要用 for i as integer to 20
Android中apk動態載入技術研究(2)android插件化及實現
name creat package path iss fontsize 調用 dex con 了解了android中類載入的前期知識點後,來看看android中DexClassLoader詳細的實現 詳細載入流程例如以下: 宿主程序會到文件系統比
Python 爬取網頁中JavaScript動態新增的內容(一)
當我們進行網頁爬蟲時,我們會利用一定的規則從返回的 HTML 資料中提取出有效的資訊。但是如果網頁中含有 JavaScript 程式碼,我們必須經過渲染處理才能獲得原始資料。此時,如果我們仍採用常規方法從中抓取資料,那麼我們將一無所獲。那麼,通過Web kit可以簡單解決這個
vb.net正則表示式快速入門(2)
6.使用?*或 進行重複?:告訴引擎匹配前導字元0次或一次。事實上是表示前導字元是可選的。(問號) :告訴引擎匹配前導字元1次或多次(空格)*:告訴引擎匹配前導字元0次或多次(星號) <[A-Za-z][A-Za-z0-9]*> 匹配沒有屬性的HTML標籤,“ <”以及“>
深入瞭解.NET中繼承和多型(下)
很久都沒寫BLGO了,關於多型的第3篇文章一晃就1年了才寫。有時比較迷茫,感覺太多東西都要學,什麼都想學,卻找不清方向了。呵呵,看著好多牛人的BLOG覺得自己水平實在是太差了。呵呵。有時甚至覺得自己寫的東西太低階了。呵呵,或許是自己抱怨太多了,還是靜下心來慢慢學習吧。以後一
動態載入XAML檔案(2)
C#程式碼部分 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Co
Unity 動態載入與記憶體(二)
Unity幾種動態載入Prefab方式的差異: 其實存在3種載入prefab的方式: 一是靜態引用,建一個public的變數,在Inspector裡把prefab拉上去,用的時候instantiate 二是Resource.Load,Load以後instantiate 三是
vb.net正則表示式快速入門(1)
深入淺出之正則表示式 作者:lzmtw 注:JanGoyvaerts為RegexBuddy寫的教程的譯文 前言:半年前我對正則表示式產生了興趣,在網上查詢過不少資料,看過不少的教程,最後在使用一個正則表示式工具RegexBuddy時發現他的教程寫的非常好,可以說是我目前見過最好的正則表示式
vb.net正則表示式快速入門(3)完
作者:lzmtw 10.選擇符正則表示式中“ ¦”表示選擇。 你可以用選擇符匹配多個可能的正則表示式中的一個。如果你想搜尋文字“cat”或“dog”,你可以用 < <cat¦dog> > 。 如果你想有更多的選擇,你只要擴充套件列表 <
ASP.NET Core 中的 ObjectPool 物件重用(一)
前言 物件池是一種設計模式,一個物件池包含一組已經初始化過且可以使用的物件,而可以在有需求時建立和銷燬物件。池的物件可以從池中取得物件,對其進行操作處理,並在不需要時歸還給池子而非直接銷燬他,他是一種特殊的工廠物件。 若初始化、例項化的代價高,且有需求需要經常例項化,但每次例項化的數量較小的情況下,使用物
AndroidStudio中集成使用Kotlin(一)
lib number lock rip enable gets nap ets android開發 AndroidStudio中集成使用Kotlin(一) 在Android開發中,不僅僅可以使用Java作為它的開發語言,好早就開始流行使用Kotlin進行Android開發
Android中關於JNI 的學習(一)對於JNIEnv的一些認識
else size 初步 jint 使用 包括 pri jnienv 就會 一個簡單的樣例讓我們初步地了解JNI的作用,可是關於JNI中的一些概念還是須要了解清楚,才可以更好的去利用它來實現我們想要做的事情。 那麽C++和Java之間的是怎樣通過JNI來進行互相調用的呢
OSGi是什麽:Java語言的動態模塊系統(一)
平臺 使用 數據 osgi servle http cto 優點 重啟 OSGi是什麽 OSGi亦稱做Java語言的動態模塊系統,它為模塊化應用的開發定義了一個基礎架構。OSGi容器已有多家開源實現,比如Knoflerfish、Equinox和Apache的Felix。您可
SQL Server 2005中的分區表(一):什麽是分區表?為什麽要用分區表?如何創建分區表?
ima 查詢條件 出錯 數據的操作 之間 方便 如何 oar 意思 如果你的數據庫中某一個表中的數據滿足以下幾個條件,那麽你就要考慮創建分區表了。 1、數據庫中某個表中的數據很多。很多是什麽概念?一萬條?兩萬條?還是十萬條、一百萬條?這個,我覺得是仁者見仁、智者
Python圖像處理庫PIL中圖像格式轉換(一)
http 分享圖片 r+ name 結果 針對 浮點 code 技術 在數字圖像處理中,針對不同的圖像格式有其特定的處理算法。所以,在做圖像處理之前,我們需要考慮清楚自己要基於哪種格式的圖像進行算法設計及其實現。本文基於這個需求,使用python中的圖像處理庫PIL來實現不
UWP中實現大爆炸效果(一)
ID eight 爆炸效果 foo 更新 The 選中 wid 重寫 自從老羅搞出大爆炸之後,各家安卓都內置了類似功能。UWP怎麽能落下呢,在這裏我們就一起擼一個簡單的大爆炸實現。 閑話不說,先上效果: 因為代碼太多,所以我打算寫成一個系列,下面是第一篇的正文: 首先
「動態規劃」筆記(一)
直接 表示 hash info 需要 clas 只需要 狀壓 技術 //主要摘抄自參考資料2333 最優性原則&&無後效性 最優子結構 狀態的轉移開銷主要包含兩個方面:每個狀態轉移的狀態數,計算新的狀態的時間. 保證從已經更新的狀態轉移過來 bool? 考慮