久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

VB.NET中動(dòng)態(tài)加載Treeview節(jié)點(diǎn)

 yuxinrong 2018-12-05
Treeview是一個(gè)重要的控件,,無(wú)論是在VB.NET,,C#還是DelphiVC++等各種語(yǔ)言中,,都充當(dāng)了導(dǎo)航器的作用,。在實(shí)際工作中,很多情況下需要將Treeview與數(shù)據(jù)庫(kù)進(jìn)行連接,,以填充其節(jié)點(diǎn),。然而,往往由于數(shù)據(jù)庫(kù)數(shù)據(jù)眾多,,一次性灌入所有的根節(jié)點(diǎn)與子節(jié)點(diǎn),,會(huì)耗用大量的起始等待時(shí)間。解決的方案,,應(yīng)該是動(dòng)態(tài)加載節(jié)點(diǎn),,起始的時(shí)候,只加載根節(jié)點(diǎn),,在點(diǎn)擊某個(gè)根節(jié)點(diǎn)時(shí),,才加載其子節(jié)點(diǎn),再點(diǎn)擊某個(gè)子節(jié)點(diǎn)時(shí),,才加載子節(jié)點(diǎn)的子節(jié)點(diǎn),,以此類(lèi)推,這樣的處理方法可以達(dá)到提高工作效率,,節(jié)省訪(fǎng)問(wèn)時(shí)間的妙用,。
本文僅以VB.NET為例,說(shuō)明此方法的使用,。其它的編程語(yǔ)言,,可以進(jìn)行仿效
首先應(yīng)該有個(gè)數(shù)據(jù)庫(kù),,用以保存數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù),。本文需要的數(shù)據(jù)庫(kù)為一個(gè)Project.mdb。其結(jié)構(gòu)為(為清楚起見(jiàn),,以漢字字段為例,,實(shí)際應(yīng)用時(shí),請(qǐng)自行更改):
表名:根節(jié)點(diǎn)
字段
類(lèi)型
大小
主鍵
根節(jié)點(diǎn)編號(hào)
文本
10
Y
根節(jié)點(diǎn)名稱(chēng)
文本
10
 
表名:第一級(jí)子節(jié)點(diǎn)
字段
類(lèi)型
大小
主鍵
根節(jié)點(diǎn)編號(hào)
文本
10
Y
第一級(jí)子節(jié)點(diǎn)編號(hào)
文本
10
聯(lián)合主鍵
第一級(jí)子節(jié)點(diǎn)名稱(chēng)
文本
10
 
表名:第二級(jí)子節(jié)點(diǎn)
字段
類(lèi)型
大小
主鍵
第一級(jí)子節(jié)點(diǎn)編號(hào)
文本
10
Y
第二級(jí)子節(jié)點(diǎn)編號(hào)
文本
10
聯(lián)合主鍵
第二級(jí)子節(jié)點(diǎn)名稱(chēng)
文本
10
 
 
三個(gè)表的關(guān)系已經(jīng)很清楚了,,在此不再羅列,。表內(nèi)填充的數(shù)據(jù)為:
根節(jié)點(diǎn)編號(hào)為123這樣類(lèi)推,,其名稱(chēng)也就為根節(jié)點(diǎn)1,、根節(jié)點(diǎn)2、根節(jié)點(diǎn)3
第一級(jí)子節(jié)點(diǎn)編號(hào)規(guī)則為:根節(jié)點(diǎn)1之下的子節(jié)點(diǎn)編號(hào)為11,、12,、13等以此類(lèi)推,根節(jié)點(diǎn)2之下的子節(jié)點(diǎn)編號(hào)為21,、22……子節(jié)點(diǎn)名稱(chēng)為:子節(jié)點(diǎn)1,、子節(jié)點(diǎn)2……
第二級(jí)子節(jié)點(diǎn)編號(hào)規(guī)則為:第一級(jí)子節(jié)點(diǎn)ij之下的第二級(jí)子節(jié)點(diǎn)的編號(hào)為ij1ij2……,,其名稱(chēng)為統(tǒng)一的:孫節(jié)點(diǎn)1,、孫節(jié)點(diǎn)2……
現(xiàn)在讓我們簡(jiǎn)單分析一下treeview的結(jié)構(gòu)(筆者準(zhǔn)備在另文專(zhuān)門(mén)剖析一下Treeview的結(jié)構(gòu),以方便有興趣的網(wǎng)友進(jìn)行高級(jí)應(yīng)用)
Treeview是由節(jié)點(diǎn)TreeNode組成的,,第一級(jí)的稱(chēng)之為根節(jié)點(diǎn)TreeRoot,,在根節(jié)點(diǎn)之下一級(jí)的稱(chēng)之為某個(gè)根節(jié)點(diǎn)的子節(jié)點(diǎn)TreeLeaf,某個(gè)子節(jié)點(diǎn)之下一級(jí)的子節(jié)點(diǎn)就稱(chēng)為該子節(jié)點(diǎn)的子節(jié)點(diǎn),。第個(gè)節(jié)點(diǎn)有兩個(gè)標(biāo)識(shí)方式,,一個(gè)是它的Text,即顯示出來(lái)的內(nèi)容,;另一個(gè)是它的Tag屬性,,一般用唯一標(biāo)識(shí)碼對(duì)其進(jìn)行標(biāo)識(shí),以用于在使用時(shí)對(duì)節(jié)點(diǎn)的識(shí)別,。在本文中,,也主要用Text屬性來(lái)顯示節(jié)點(diǎn)的名稱(chēng)字段,用Tag屬性來(lái)顯示節(jié)點(diǎn)的編號(hào)屬性,。(節(jié)點(diǎn)編號(hào)被設(shè)為主鍵,,也就是唯一的標(biāo)識(shí)了)
 
1.加載根節(jié)點(diǎn)
好了,我們?cè)撻_(kāi)始在VB.NET中進(jìn)行演練了,!第一步,,當(dāng)然是看看怎么在窗體起始的時(shí)候加載根節(jié)點(diǎn):
   '定義公用變量
    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
        '載入根節(jié)點(diǎn)表至treeview中,作為第一級(jí)
        myconnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "/project.mdb" '數(shù)據(jù)庫(kù)連接請(qǐng)自行更換
        mycommand.CommandText = "SELECT 根節(jié)點(diǎn)編號(hào),根節(jié)點(diǎn)名稱(chēng) FROM 根節(jié)點(diǎn)"
        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) '把編號(hào)放入tag中
                tree_root.Text = mysqlreader.GetString(1) '樹(shù)上顯示的是根節(jié)點(diǎn)名稱(chēng)
                '請(qǐng)根據(jù)你數(shù)據(jù)庫(kù)字段的類(lèi)型來(lái)決定是否用getstring或其它類(lèi)型
                TreeView1.Nodes.Add(tree_root)
            End While
        Catch ex As Exception
            MessageBox.Show(ex.ToString, "數(shù)據(jù)表根節(jié)點(diǎn)載入錯(cuò)誤", vbOKOnly)
        Finally
            myconnection.Close()
        End Try
        TreeView1.ExpandAll()
        TreeView1.Select()
    End Sub

  

Note:請(qǐng)大家要熟悉TextTag的作用,,在使用時(shí)會(huì)達(dá)到很好的效果,。

2.點(diǎn)擊時(shí)加入子節(jié)點(diǎn)
對(duì)TreeView的點(diǎn)擊,對(duì)于TreeView控件本身,,并沒(méi)有為哪一個(gè)級(jí)別的Node編寫(xiě)點(diǎn)擊(選擇)事件處理程序,,而是把所有節(jié)點(diǎn)的點(diǎn)擊事件都寫(xiě)入了一個(gè)AfterSelect事件中,。因此,,在編寫(xiě)點(diǎn)擊加入子節(jié)點(diǎn)的程序之前,我們還必須編寫(xiě)一個(gè)查找點(diǎn)擊的節(jié)點(diǎn)是哪一級(jí)節(jié)點(diǎn)的方法,。
Public Function NodeLevel(ByVal n As TreeNode) As Byte
        '* 找出樹(shù)中當(dāng)前節(jié)點(diǎn)的級(jí)數(shù)
        Dim i As Byte = 1
        Dim m As String
        Do Until n.Parent Is Nothing
            n = n.Parent
            i += 1
        Loop
        Return i
End Function
通過(guò)這個(gè)函數(shù),,就可以很方便地得到節(jié)點(diǎn)的級(jí)別?,F(xiàn)在我們可以放心地編寫(xiě)節(jié)點(diǎn)選擇事件處理程序,以實(shí)現(xiàn)動(dòng)態(tài)加載各級(jí)節(jié)點(diǎn)的子節(jié)點(diǎn),。
Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
        Select Case NodeLevel(e.Node).ToString
            Case "1"
                If e.Node.GetNodeCount(False) = 0 Then
                    mycommand.CommandText = "select 第一級(jí)子節(jié)點(diǎn)編號(hào),第一級(jí)子節(jié)點(diǎn)名稱(chēng) from 第一級(jí)子節(jié)點(diǎn) where 根節(jié)點(diǎn)編號(hào) ='" & e.Node.Tag & "'"
                    fill_treeleaf()
                End If
            Case "2"
                If e.Node.GetNodeCount(False) = 0 Then
                    mycommand.CommandText = "select 第二級(jí)子節(jié)點(diǎn)編號(hào),第二級(jí)子節(jié)點(diǎn)名稱(chēng) from 第二級(jí)子節(jié)點(diǎn) where 第一級(jí)子節(jié)點(diǎn)編號(hào) ='" & e.Node.Tag & "'"
                    fill_treeleaf()
                End If
        End Select
End Sub
 
Public Sub fill_treeleaf()
        mycommand.Connection = myconnection
        Try
            myconnection.Open()
            Dim mysqlreader As OleDb.OleDbDataReader = mycommand.ExecuteReader
            While mysqlreader.Read()
                Dim tree_leaf As New TreeNode()
                tree_leaf.Tag = mysqlreader.GetString(0)
                tree_leaf.Text = mysqlreader.GetString(1)
                TreeView1.SelectedNode.Nodes.Add(tree_leaf)
            End While
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            myconnection.Close()
        End Try
End Sub

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多