Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

TreeView Node mit (+) Expand Symbol ohne Childnode

17 views
Skip to first unread message

Joerg Trumpfheller

unread,
Apr 26, 2013, 7:33:09 AM4/26/13
to
Hallo Leute,

vielleicht weiß jemand, ob das programmtechnisch möglich ist.
Ich habe einen Tree der bis zu 5 Childebenen hat. Den Baum komplett füllen dauert zulange, deswegen mache ich es so, dass auf Ebene 1 geguckt wird, ob es Child-Elemente hat, wenn ja, füge 2. Ebene ein. Die nächste Ebene wird dann beim Aufklappen (+) des Nodes erzeugt, usw.

Da die 1. Ebene bereits mehr als 500 Elemente hat und die 2. Ebene zwischen 1 - 100 Elementen haben kann, kann auch das relativ lange dauern.

Ist es möglich eine Art Pseudo (+) anzulegen, ohne dass man ein Childnode erzeugt hat?

Code sieht ungefähr so aus:
Dim distinct1 As DataTable, distinct2 As DataTable
Dim iRoot As TreeNode, iNode1 As TreeNode, iNode2 As TreeNode

iRoot = New TreeNode()
iRoot.Name = "Root"
iRoot.Text = "Meine Projekte"
myTree.Nodes.Add(iRoot)

'Durchlauf Ebene1 Projekt
IN_DataTable.DefaultView.RowFilter = FilteredUserRanges
IN_DataTable.DefaultView.Sort = "Projekt ASC"
distinct1 = IN_DataTable.DefaultView.ToTable(True, "Projekt")

For Each row1 As DataRow In distinct1.Rows
prjName = row1(0).ToString

iNode1 = New TreeNode()
iNode1.Name = "Projekt"
iNode1.Text = prjName
iRoot.Nodes.Add(iNode1)

'Durchlauf Ebene2 Gruppe
IN_DataTable.DefaultView.RowFilter = "(" & FilteredUserRanges & ") AND Projekt = '" & prjName & "'"
IN_DataTable.DefaultView.Sort = "Gruppe ASC"
distinct2 = IN_DataTable.DefaultView.ToTable(True, "Gruppe")

'bisher wird Ebene 2 immer gefüllt
For Each row2 As DataRow In distinct2.Rows
grpName = row2(0).ToString
iNode2 = New TreeNode()
iNode2.Name = "Gruppe"
iNode2.Text = grpName
iNode1.Nodes.Add(iNode2)
Next

'nur zählen, aber trotzdem das (+) am Node anzeigen
If (distinct2.Rows.Count > 0) Then
'sowas in dieser Art
iNode1.showExpandSymbol
End If
Next

myTree.Nodes(0).Expand()


Besten Dank Jörg

Peter Fleischer

unread,
Apr 28, 2013, 3:00:36 AM4/28/13
to
Hi Joerg,
ich habe da ein Beispiel ausgearbeitet, was das verzögerte Aufklappen
realisiert. Um anzuzeigen, dass es weitere Unterknoten gibt, wird ein
Dummy-Knoten angelegt, der beim Anklicken durch den eigentlichen Sub-Tree
mit den nachgeladenen Daten ersetzt wird.

<Tipps und Tricks - informtools - Tipp 404>
http://www.informtools.de/kb.aspx?id=404

--
Peter Fleischer

Joerg Trumpfheller

unread,
Apr 30, 2013, 7:06:00 AM4/30/13
to
Am Sonntag, 28. April 2013 09:00:36 UTC+2 schrieb Peter Fleischer:
> Hi Joerg, ich habe da ein Beispiel ausgearbeitet, was das verzögerte Aufklappen realisiert. Um anzuzeigen, dass es weitere Unterknoten gibt, wird ein Dummy-Knoten angelegt, der beim Anklicken durch den eigentlichen Sub-Tree mit den nachgeladenen Daten ersetzt wird. <Tipps und Tricks - informtools - Tipp 404> http://www.informtools.de/kb.aspx?id=404 -- Peter Fleischer

Hallo Peter,

ja genau so etwas hab ich gesucht. Werde ich mal in meine soßen einbinden und schauen, wie es läuft.

Das Problem bei der ganzen Sache ist, dass nicht das Einfügen des Childnodes Zeit nimmt, sondern die vorherige Filterung für das jeweilige Childelement

'Durchlauf Ebene2 Gruppe
IN_DataTable.DefaultView.RowFilter = "(Bereich = 'MyRanges') AND Projekt = '" & prjName & "'"
IN_DataTable.DefaultView.Sort = "Gruppe ASC"
distinct2 = IN_DataTable.DefaultView.ToTable(True, "Gruppe")

Gibt es da eine performantere Möglichkeit?
Gruß Joerg

Peter Fleischer

unread,
May 3, 2013, 12:28:08 PM5/3/13
to
Hi J�rg,
versuche es mal mit LinQ. Ich vermute, dass es da etwas schneller geht. Ein
anderer L�sungsweg w�re die Sortierung vorab mit Nachfolgender
Positionierung und Durchlaufen ab Position solange das Kriterium (nach dem
sortiert wurde) zutrifft.

--
Peter Fleischer

0 new messages