Filling Treeview takes long time

0
0

When i try to fill a treview with a lot of nodes, refresh takes a long time.

I suppose treview is refreshed every time  i add a node.

What is the better way to fill treview with several nodes ? Here is my little procedure which is execute in a few seconds, but after this the  page blocks.

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

TreeView1.Nodes.Clear()
Dim r1 As TreeNode
Dim r2 As TreeNode
Dim r3 As TreeNode
Dim r4 As TreeNode
Dim r5 As TreeNode

For i0 As Integer = 0 To 10
r1 = TreeView1.Nodes.Add(“0 naming”)
r1.ImageIndex = 1
r1.StateImageIndex = 3
For i1 As Integer = 0 To 2
r2 = r1.Nodes.Add(“1 naming”)
r2.ImageIndex = 1
r2.StateImageIndex = 3
For i2 As Integer = 0 To 2
r3 = r2.Nodes.Add(“2 naming”)
r3.ImageIndex = 1
r3.StateImageIndex = 3
For i3 As Integer = 0 To 2
r4 = r3.Nodes.Add(“3 naming”)
r4.ImageIndex = 1
r4.StateImageIndex = 3
For ix As Integer = 0 To 10
r5 = r4.Nodes.Add(“4 naming”)
r5.ImageIndex = 1
r5.StateImageIndex = 3
Next
Next

Next
Next
Next

End Sub

  • You must to post comments
0
0

Luca, thanks for your answer.

I followed your suggestions. With the use of TreeView.VirtualScrolling = real-time execution has been reduced.

I need to populate treview with all the nodes at the start, so when I try to populate with 76000 nodes it takes 25 seconds with Chrome and 95 seconds with IE 11. Moreover if I call the procedure 2 times with IE11, I get an “Out of memory ” error.

I assumed that using LazyLoading would reduce the refresh time because only visible nodes will be sent to the client, but I think the time is still too long.
Do you have any other suggestions? Is There  a third party treeview to be used alternatively ?
I attach my procedure.
Thank you.

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

TreeView1.Nodes.Clear()
TreeView1.Update()
Dim r1 As TreeNode
Dim r2 As TreeNode
Dim r3 As TreeNode
Dim r4 As TreeNode
Dim r5 As TreeNode

Dim root As TreeNode
root = TreeView1.Nodes.Add(“Root”)
root.LazyLoading = True

For i0 As Integer = 0 To 20
r1 = root.Nodes.Add(“0 naming”)
r1.Visible = False
r1.ImageIndex = 1
r1.StateImageIndex = 3
r1.LazyLoading = True

For i1 As Integer = 0 To 8
r2 = r1.Nodes.Add(“1 naming”)
r2.Visible = False
r2.ImageIndex = 1
r2.StateImageIndex = 3
r2.LazyLoading = True

For i2 As Integer = 0 To 6
r3 = r2.Nodes.Add(“2 naming”)
r3.Visible = False
r3.ImageIndex = 1
r3.StateImageIndex = 3
r3.LazyLoading = True

For i3 As Integer = 0 To 8
r4 = r3.Nodes.Add(“3 naming”)
r4.Visible = False
r4.ImageIndex = 1
r4.StateImageIndex = 3
r4.LazyLoading = True

For ix As Integer = 0 To 10
r5 = r4.Nodes.Add(“4 naming”)
r5.Visible = False
r5.ImageIndex = 1
r5.StateImageIndex = 3
r5.LazyLoading = True

Next
r4.Collapse()
Next
r3.Collapse()
Next
r2.Collapse()

Next
r1.Collapse()

Next
root.Collapse()
End Sub

  • You must to post comments
0
0
  • Use TreeView.VirtualScrolling = true (this allows the browser to handle unlimited nodes)
  • Use TreeNode.LazyLoading = true (this makes Wisej send the child nodes to the client the first time it’s expanded)
  • Use TreeNode.IsParent = true and TreeNode.ShowLoader = true then populate (add Nodes) when the node is expanded (this lets your app populate the child nodes on expansion)
  • Luca
    • Luca
    • Jul 15, 2020 - 5:24 pm
    • 1
    BTW we used this with 50,000+ nodes.
  • You must to post comments
Showing 2 results
Your Answer

Please first to submit.