none
TreeView Sortierung

    Frage

  • Hallo Ich habe ein TreeView welches wie folgt mit einer Dateistrucktur gefüllt wird

    .......

        For Each folder1 In fs.GetFolder(path).SubFolders
            nextname = path & "\" & folder1.Name
            If IsNumeric(folder1.Name) And Len(folder1.Name) = 1 Then ZwischenNull = "0" Else ZwischenNull = ""
            If IsNumeric(folder1.Name) Then tv.Nodes.Add path, tvwChild, nextname, ZwischenNull & folder1.Name
            Call addtotree(path & "\" & ZwischenNull & folder1.Name, tv)
        Next
    ......

    Die Ordner sind Jahreszhlen 2009 2010 2011 .....

    in den unterordner habe ich als Ordner den Monatsordner 1 2 3 ....9 10 11 12

    ist leider so angelegt und auch nicht änderbar

    Die sortierung im TreeView ist nun,  klar wie soll es auch sein, 1 - 11 - 12 - 2 .......

     

    wie man sieht habe ich oben schon eine 0 vor meinen Ordner mit Len(1) gebracht nur Interressiert das die Sortierung des TreeViews nicht

     

    kann mir da jemand helfen

    Donnerstag, 23. Juni 2011 16:42

Antworten

  • Hallo MCDPone,

     

    Deine Methode – einen “0” vor des Monat-Elements zu setzen – soll eigentlich die Sortieung richtig machen. Es ist nur so, dass du die Sortierung fuer die Unterelemente der Jahrenelemente nicht angeschaltet hast. Es gibt beim TreeView Steuerelement zwei unterschiedliche Sortierungen:

    1.   TreeView.Sorted = True – das macht die Sortierung nur fuer die Elemente der ersten Stufe des TreeViews (rot markiert). Das wirkt fuer 2009, 2010, 2011 aber wirkt nicht fuer 3,2,1,4,5

    2009

        -- 3

        -- 2

        -- 1

        -- 4

        -- 5

    2010

        -- 3

        -- 2

        -- 1

        -- 4

        -- 5

    2011

        -- 3

        -- 2

        -- 1

        -- 4

        -- 5

     

    2.   Node.Sorted = True – das macht die Sortierung fuer alle Unterelemente des Nodes (gruen markiert). Nehmen wir an, ich habe fuer 2009 Node die Sortierung angeschaltet:

     

    2009

        -- 1

        -- 2

        -- 3

        -- 4

        -- 5

    2010

        -- 3

        -- 2

        -- 1

        -- 4

        -- 5

    2011

        -- 3

        -- 2

        -- 1

        -- 4

        -- 5

     

    Also muss man explizit  die Sortierung fuer die Jahrenelementen anschalten. Hier ist ein Beispiel:

    Private Sub Form_Load()
      Dim n As Node
      
      'diese Einstellung hat keinen Einfluss auf der Sortierung der Unterordner
      tvw.Sorted = True
      
      tvw.Nodes.Add , , "all_years", "Years"
      Set n = tvw.Nodes.Add("all_years", tvwChild, "y2009", "2009")
      'das Parent Node (2009) soll explizit sortiert werden. um die Unterordner sortiert zu bekommen
      n.Sorted = True
      
      tvw.Nodes.Add "y2009", tvwChild, "y20093", "03"
      tvw.Nodes.Add "y2009", tvwChild, "y20091", "01"
      tvw.Nodes.Add "y2009", tvwChild, "y20098", "08"
      tvw.Nodes.Add "y2009", tvwChild, "y20092", "02"
      tvw.Nodes.Add "y2009", tvwChild, "y20099", "09"
      tvw.Nodes.Add "y2009", tvwChild, "y200910", "10"
      tvw.Nodes.Add "y2009", tvwChild, "y20097", "07"
      tvw.Nodes.Add "y2009", tvwChild, "y200912", "12"
      tvw.Nodes.Add "y2009", tvwChild, "y20094", "04"
      tvw.Nodes.Add "y2009", tvwChild, "y20095", "05"
      tvw.Nodes.Add "y2009", tvwChild, "y200911", "11"
      tvw.Nodes.Add "y2009", tvwChild, "y20096", "06"
    
    End Sub
    

     

    Gruesse,

    Bogdan

     

    Donnerstag, 30. Juni 2011 10:26
    Moderator

Alle Antworten

  • Ohne es jetzt zu testen, aber wenn die Eigenschaft Sorted auf False steht, sortiert der TreeView nicht, wenn wir über den ActiveX Microsoft TreeView sprechen. Die Anzeigereihenfolge entspricht der Einfügereihenfolge.


    Microsoft MVP Office Access
    https://mvp.support.microsoft.com/profile/Stefan.Hoffmann
    Montag, 27. Juni 2011 08:49
    Moderator
  • Hallo MCDPone,

     

    Deine Methode – einen “0” vor des Monat-Elements zu setzen – soll eigentlich die Sortieung richtig machen. Es ist nur so, dass du die Sortierung fuer die Unterelemente der Jahrenelemente nicht angeschaltet hast. Es gibt beim TreeView Steuerelement zwei unterschiedliche Sortierungen:

    1.   TreeView.Sorted = True – das macht die Sortierung nur fuer die Elemente der ersten Stufe des TreeViews (rot markiert). Das wirkt fuer 2009, 2010, 2011 aber wirkt nicht fuer 3,2,1,4,5

    2009

        -- 3

        -- 2

        -- 1

        -- 4

        -- 5

    2010

        -- 3

        -- 2

        -- 1

        -- 4

        -- 5

    2011

        -- 3

        -- 2

        -- 1

        -- 4

        -- 5

     

    2.   Node.Sorted = True – das macht die Sortierung fuer alle Unterelemente des Nodes (gruen markiert). Nehmen wir an, ich habe fuer 2009 Node die Sortierung angeschaltet:

     

    2009

        -- 1

        -- 2

        -- 3

        -- 4

        -- 5

    2010

        -- 3

        -- 2

        -- 1

        -- 4

        -- 5

    2011

        -- 3

        -- 2

        -- 1

        -- 4

        -- 5

     

    Also muss man explizit  die Sortierung fuer die Jahrenelementen anschalten. Hier ist ein Beispiel:

    Private Sub Form_Load()
      Dim n As Node
      
      'diese Einstellung hat keinen Einfluss auf der Sortierung der Unterordner
      tvw.Sorted = True
      
      tvw.Nodes.Add , , "all_years", "Years"
      Set n = tvw.Nodes.Add("all_years", tvwChild, "y2009", "2009")
      'das Parent Node (2009) soll explizit sortiert werden. um die Unterordner sortiert zu bekommen
      n.Sorted = True
      
      tvw.Nodes.Add "y2009", tvwChild, "y20093", "03"
      tvw.Nodes.Add "y2009", tvwChild, "y20091", "01"
      tvw.Nodes.Add "y2009", tvwChild, "y20098", "08"
      tvw.Nodes.Add "y2009", tvwChild, "y20092", "02"
      tvw.Nodes.Add "y2009", tvwChild, "y20099", "09"
      tvw.Nodes.Add "y2009", tvwChild, "y200910", "10"
      tvw.Nodes.Add "y2009", tvwChild, "y20097", "07"
      tvw.Nodes.Add "y2009", tvwChild, "y200912", "12"
      tvw.Nodes.Add "y2009", tvwChild, "y20094", "04"
      tvw.Nodes.Add "y2009", tvwChild, "y20095", "05"
      tvw.Nodes.Add "y2009", tvwChild, "y200911", "11"
      tvw.Nodes.Add "y2009", tvwChild, "y20096", "06"
    
    End Sub
    

     

    Gruesse,

    Bogdan

     

    Donnerstag, 30. Juni 2011 10:26
    Moderator