VB. net, мне нужно быстрее заполнить древовидное представление из таблицы базы данных с n уровнями - PullRequest
0 голосов
/ 30 мая 2020

Мне нужно использовать древовидное представление из таблицы данных, которую я получил из ODB C dbase. таблица имеет CompID, ParentCompID и CompName, все строки. В моей таблице около 4500 строк. образец таблицы базы данных

Я нашел код на inte rnet и адаптировал его так, чтобы он работал для меня, я могу заполнить древовидное представление, но из-за детей и внуков в просмотр дерева занимает у меня около 7 минут (что не работает в моей программе). Я застрял в этом на неделю, не могу найти более быстрого способа. Я начинающий программист VB. net. Кто-нибудь может мне помочь или указать мне направление? Спасибо.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TreeView1.Visible = False

    Dim PrSet As DataSet = PDataset("SELECT  CompID, ParentCompID, CompName, CompNo FROM [Component] Where CHAR_LENGTH(CompNo) = 14 AND (ParentCompID IS NOT NULL)")
    TreeView1.BeginUpdate()
    TreeView1.Nodes.Clear()
    DataGridView5.DataSource = PrSet.Tables(0)
    For Each dr As DataRow In PrSet.Tables(0).Rows
        If (dr("ParentCompID")) = 1040965 Then
            Dim tnParent As New TreeNode()
            tnParent.Text = dr("CompNo").ToString().Trim() & " " & dr("CompName").ToString().Trim()
            Dim value As String = dr("CompID").ToString()
            tnParent.Expand()
            TreeView1.Nodes.Add(tnParent)
            FillChild(tnParent, value)

        End If
    Next

    TreeView1.Sort()
    TreeView1.Visible = True
    TreeView1.EndUpdate()

End Sub
Public Function FillChild(parent As TreeNode, IID As String) As Integer


    Dim ds As DataSet = PDataset("SELECT CompID, ParentCompID, CompName, CompNo FROM Component WHERE ParentCompID =" + IID)
    If ds.Tables(0).Rows.Count > 0 Then
        For Each dr As DataRow In ds.Tables(0).Rows
            Dim child As New TreeNode()
            child.Text = dr("CompNo").ToString().Trim() & " " & dr("CompName").ToString().Trim()
            Dim temp As String = dr("CompID").ToString()
            child.Collapse()
            parent.Nodes.Add(child)
            FillChild(child, temp)
        Next
        Return 0
    Else
        Return 0
    End If

End Function
Protected Function PDataset(select_statement As String) As DataSet
    Dim _con As New OdbcConnection("Dsn=amos")
    Dim ad As New OdbcDataAdapter(select_statement, _con)
    Dim ds As New DataSet()
    ad.Fill(ds)
    _con.Close()
    Return ds
End Function
...