Ik heb de volgende MSSQL tabel:
Hier heb ik de volgende vb.net code bij:
Het probleem
De treelist word dus bij het laden van de form gevult (alleen de root)
Als er een node word uitgeklapt (expanded) kijkt hij of de tag van de desbetreffende node true is.
Als dit het geval is betekend het dat deze node al gevult is.
Zo niet dan moet deze node gevult worden met de data uit de database.
Het vullen van deze data gaat echter zeer traag (16 nodes per seconde)
aangezien er in sommige mappen een paar honderd submappen zitten moet er ontzettend lang gewacht worden. Het ligt puur aan het vullen van de treelist, de data uit de database halen gaat lekker snel (tenminste de query uitvoeren)
Weer iemand een oplossing op de treelist anders te vullen of tenminste de snelheid te verbeteren.
code:
1
2
3
4
5
| tbl_folders: id INT(11) AutoIncrement KEY parentid INT(11) name VARCHAR(255) isfolder INT(11) |
Hier heb ik de volgende vb.net code bij:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load pr_sql.OpenConnection() Dim folders As ADODB.Recordset folders = pr_sql.Execute1("SELECT id, parent, name FROM folders WHERE isfolder='-1' and parent is null order by name") folders.MoveFirst() Do While Not (folders.EOF) Dim index As String = folders.Fields(0).Value TreeView.Nodes.Add(index, folders.Fields(2).Value, 0) If nodeHasChild(index) Then TreeView.Nodes(index).Nodes.Add("Tijdelijk") End If folders.MoveNext() Application.DoEvents() Loop End Sub Function nodeHasChild(ByVal id As Integer) As Boolean Dim rs As ADODB.Recordset rs = pr_sql.Execute1("SELECT id, parent, name FROM folders WHERE isfolder='-1' and parent=" & id) If Not rs.EOF Then Return True End If Return False End Function Private Sub TreeView_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView.BeforeExpand If Not e.Node.Tag Then TreeView.BeginUpdate() e.Node.Tag = True e.Node.Nodes.Clear() Dim id As Integer = e.Node.Name Dim rs As ADODB.Recordset rs = pr_sql.Execute1("SELECT id, parent, name FROM folders WHERE isfolder='-1' and parent=" & id & " order by name") progress.Maximum = rs.RecordCount progress.Minimum = 0 progress.Value = 0 rs.MoveFirst() Do While Not (rs.EOF) progress.Value += 1 Dim index As String = rs.Fields(0).Value e.Node.Nodes.Add(index, rs.Fields(2).Value, 0) If nodeHasChild(index) Then e.Node.Nodes(index).Nodes.Add("Tijdelijk") End If rs.MoveNext() Loop progress.Value = 0 TreeView.EndUpdate() End If End Sub |
Het probleem
De treelist word dus bij het laden van de form gevult (alleen de root)
Als er een node word uitgeklapt (expanded) kijkt hij of de tag van de desbetreffende node true is.
Als dit het geval is betekend het dat deze node al gevult is.
Zo niet dan moet deze node gevult worden met de data uit de database.
Het vullen van deze data gaat echter zeer traag (16 nodes per seconde)
aangezien er in sommige mappen een paar honderd submappen zitten moet er ontzettend lang gewacht worden. Het ligt puur aan het vullen van de treelist, de data uit de database halen gaat lekker snel (tenminste de query uitvoeren)
Weer iemand een oplossing op de treelist anders te vullen of tenminste de snelheid te verbeteren.