TreeView

  • Hallo Community,

    diesmal geht es in meiner Frage um die Einträge in ein TreeView.

    Folgendes: Ich lese aus einer Ini-Datei einen String aus, welcher mehrere Werte beinhaltet.
    Diese sind durch ein Semikolon getrennt. Dabei hat ein Wert das zuvor eingetragene Datum, welchen nochmals an den Punkten gesplited wird, so das Tag, Monat und Jahr jeweils in einem Array stehen (bsp.: $aDate[1] - $aDate[3]).

    Jetzt möchte ich in ein TreeView zuerst das Jahr, darunter für das jeweilige Jahr den Monat und dann den Tag einordnen. Am Ende sind es insgesamt 4 " Ebenen". In den Eintrag des Tages kommt am Ende noch eine letzte Unterteilung in 4 TreeViewEinträge.

    So soll es quasi am Ende aussehen:

    [autoit]

    #include <GuiConstantsEx.au3>

    [/autoit][autoit][/autoit][autoit]

    GuiCreate("Sample GUI", 400, 400)
    GuiSetIcon(@SystemDir & "\mspaint.exe", 0)

    [/autoit][autoit][/autoit][autoit]

    $treeOne = GuiCtrlCreateTreeView(10, 10, 200, 300)
    $hJahr2010 = GuiCtrlCreateTreeViewItem("2010", $treeOne)
    $hMonat_2010_5 = GuiCtrlCreateTreeViewItem("Mai", $hJahr2010)
    $hMonat_2010_6 = GuiCtrlCreateTreeViewItem("Juni", $hJahr2010)
    $hTag_2010_6_5 = GuiCtrlCreateTreeViewItem("05.06.2011", $hMonat_2010_6)
    $hTag_2010_6_6 = GuiCtrlCreateTreeViewItem("06.06.2011", $hMonat_2010_6)
    GuiCtrlCreateTreeViewItem("Eintrag 1", $hTag_2010_6_6)
    GuiCtrlCreateTreeViewItem("Eintrag 2", $hTag_2010_6_6)
    $hJahr2011 = GuiCtrlCreateTreeViewItem("2011", $treeOne)
    $hMonat_2011_5 = GuiCtrlCreateTreeViewItem("Mai", $hJahr2011)
    $hMonat_2011_6 = GuiCtrlCreateTreeViewItem("Juni", $hJahr2011)
    $hTag_2011_6_5 = GuiCtrlCreateTreeViewItem("05.06.2011", $hMonat_2011_6)
    $hTag_2011_6_6 = GuiCtrlCreateTreeViewItem("06.06.2011", $hMonat_2011_6)
    GuiCtrlCreateTreeViewItem("Eintrag 1", $hTag_2011_6_6)
    GuiCtrlCreateTreeViewItem("Eintrag 2", $hTag_2011_6_6)

    [/autoit][autoit][/autoit][autoit]

    GuiSetState()
    While GuiGetMsg() <> $GUI_EVENT_CLOSE
    WEnd

    [/autoit]

    Ich überprüfe vor dem eigentlichen Eintragen den Wert ob er schon in dem TreeView vorhanden ist, da nur jeder Eintrag (Jahr, Monat im Jahr, Tag im Monat) nur 1x vorkommen soll. Daher braucht ja jeder Eintrag in TreeView eine eindeutige Variable, welche das Jahr,Monat,Tag enthält.

    Meine derzeitige "beste" Lösung sieht so aus:

    [autoit]

    $aReadTotal = IniReadSection($sIniFileName,"Section")

    [/autoit][autoit][/autoit][autoit]

    dim $hDate[9999][13]
    For $iRead = 1 to $aReadTotal[0][0]
    $aRead_Splited = StringSplit($aReadTotal[$iRead][1],";")
    $aReadDate_Splited = StringSplit($aRead_Splited[2],".")
    _ArrayDisplay($aReadDate_Splited)
    If _GUICtrlTreeView_FindItem($hOverview,$aReadDate_Splited[3]) = 0 Then
    $hDate[$aReadDate_Splited[3]][0] = GUICtrlCreateTreeViewItem($aReadDate_Splited[3],$hOverview)
    EndIf
    If _GUICtrlTreeView_FindItem($hDate[$aReadDate_Splited[3]][0],_DateToMonth_My($aReadDate_Splited[2])) = 0 then
    $hDate[$aReadDate_Splited[3]][$aReadDate_Splited[2]] = GUICtrlCreateTreeViewItem(_DateToMonth_My($aReadDate_Splited[2]),$hDate[$aReadDate_Splited[3]][0])
    EndIf
    Next

    [/autoit]

    Bitte mit vorsicht genießen. Es ist sicherlich nicht die beste Lösung.
    Das gezeigte Beispiel zeigt nur das Eintragen des Jahres und des Monats.
    Allerdings gefällt mir die sache mit diesem langen Arrays nicht und es geht bestimmt auch noch einfacher.
    Die Funktion _DateToMonth_My ändert nur den Monat von einer Zahl in den Namen (als deutsche Version) und nicht wie im originalen Date.au3.

    Die Ini sieht wie folgt aus:

    Code
    ID05192130544201112=Einnahmen;01.06.2011;Wert 1;Wert 2;Wert 3;Wert 4;Wert 5

    EDIT: Ich hab jetzt schonmal mit einem arbeitskollegen geredet. Die Frage ist nun ob ich ein Benutzeradribut (Key) devinieren kann?

    Ich bin für jede Hilfe, auch bei anderen Sachen (z.B. Scriptaufbau etc.), SEHR dankbar!!

    Gruß
    Prixma

    2 Mal editiert, zuletzt von Prixma (11. Mai 2011 um 13:59)