Frage zur ListView

  • Guten Abend liebes Forum,

    ich bin recht neu hier und hoffe Ihr könnt mir helfen. :)

    Ich habe mir eine ListView erstellt und möchte jetzt wissen, wie ich es schaffe dort nach belieben Daten einzutragen.

    Beispiel:

    Es gibt einen Button der bewirkt, dass sich ein Fenster öffnet und ich kann dort in 3 Inputboxen Daten eintragen, z.B. Stadt, PLZ und die Hausnummer. Wenn ich anschließend in diesem Fenster auf OK gehe soll er mir diese Daten in die ListView eintragen.
    So weit so gut. Wenn ich das aber noch mal mache, z.B. für eine neue Stadt / Auftrag, soll in der ListView eine zweite Zeile erscheinen (ein zusätzliches AddItem) mit den neuen, gerade eingegebenen Daten.
    Ich schaffe es aber nur, dass er mir zwar die zweite Zeile erstellt, aber die erste mit überschreibt.

    Ich vermute mal stark dass eine Art Zähler zur Unterscheidung eingebaut werden muss.
    Leider habe ich keine Idee zur Umsetzung.

    Könnt Ihr mir helfen?

    Danke schon mal :)

    Mit freundlichen Grüßen
    Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Hallo das ging ja schnell.

    Ja hier der Code:

    ;Alle Deklarationen befinden sich in der decl.au3


    #include <data\decl.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>


    Opt("GUIOnEventMode", 1); OnEventmode aktiviert

    $Window_Main = GUICreate("Test", 475, 620)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE_Window_Main")

    ;ListView
    $ListView_Bauvorhaben = GUICtrlCreateListView("", 10, 10, 455, 560)
    _GUICtrlListView_AddColumn($ListView_Bauvorhaben, "Bauvorhaben", 200)
    _GUICtrlListView_AddColumn($ListView_Bauvorhaben, "Postleitzahl", 75)
    _GUICtrlListView_AddColumn($ListView_Bauvorhaben, "Staße", 190)


    $Button_Neues_Bauvorhaben = GUICtrlCreateButton("Neues Bauvorhaben", 10, 580, 120, 30)
    GUICtrlSetOnEvent($Button_Neues_Bauvorhaben, "Neues_Bauvorhaben")

    $Button_Auftrag_bearbeiten = GUICtrlCreateButton("Bauvorhaben bearbeiten", 150, 580, 140, 30)

    GUISetState(@SW_Show)

    While 1
    Sleep(1000)
    WEnd


    Func Neues_Bauvorhaben()

    $Window_Neues_Bauvorhaben = GUICreate("Neues bauvorhaben anlegen", 400, 225)

    GUICtrlCreateLabel("Name des Bauvorhabens eingeben", 10, 10)
    $Input_Name_Bauvorhaben = GUICtrlCreateInput("", 10, 30, 380, 20)

    GUICtrlCreateLabel("Postleitzahl eingeben", 10, 70)
    $Input_PLZ = GUICtrlCreateInput("", 10, 90, 380, 20)

    GUICtrlCreateLabel("Straße eingeben", 10, 130)
    $Input_Strasse = GUICtrlCreateInput("", 10, 150, 380, 20)


    $Button_OK_Bauvorhaben_Anlegen = GUICtrlCreateButton("OK! Bauvorhaben anlegen", 125, 190, 150, 30)
    GUICtrlSetOnEvent($Button_OK_Bauvorhaben_Anlegen, "OK_Bauvorhaben_Anlegen")

    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE_Window_Neues_Bauvorhaben")
    GUISetState(@SW_Show)
    EndFunc


    Func OK_Bauvorhaben_Anlegen()

    $LESEN_Input_Name_Bauvorhaben = GUICtrlRead($Input_Name_Bauvorhaben)
    $LESEN_Input_PLZ = GUICtrlRead($Input_PLZ)
    $LESEN_Input_Strasse = GUICtrlRead($Input_Strasse)

    _GUICtrlListView_AddItem($ListView_Bauvorhaben, $LESEN_Input_Name_Bauvorhaben, 0)
    _GUICtrlListView_AddSubItem($ListView_Bauvorhaben, 0, $LESEN_Input_PLZ, 1, 0)
    _GUICtrlListView_AddSubItem($ListView_Bauvorhaben, 0, $LESEN_Input_Strasse, 2, 0)

    GUIDelete($Window_Neues_Bauvorhaben)
    GUISwitch($Window_Main)

    EndFunc


    Func CLOSE_Window_Main()
    Exit
    EndFunc

    Func CLOSE_Window_Neues_Bauvorhaben()
    GUIDelete($Window_Neues_Bauvorhaben)
    GUISwitch($Window_Main)
    EndFunc


    Die Variablen habe ich alle in der decl.au3 deklariert:

    ;Decl.au3 | Hier befinden sich alle Deklarationen

    ;Deklarationen für GUI und GUI-Steuerelemente
    Global $Window_Main, $ListView_Bauvorhaben, $Window_Neues_Bauvorhaben
    Global $Button_Neues_Bauvorhaben, $Button_Auftrag_bearbeiten, $Button_OK_Bauvorhaben_Anlegen
    Global $Input_Name_Bauvorhaben, $Input_PLZ, $Input_Strasse
    Global $Tab_Daten_Bauvorhaben, $Tab_Daten_Materialbestellung, $Tab_Daten_Fertigung, $Tab_Daten_Verzinkerei, $Tab_Daten_Transport

    ;Variablen, die für das lesen der Eingabedaten zuständig sind
    Global $LESEN_Input_Name_Bauvorhaben, $LESEN_Input_PLZ, $LESEN_Input_Strasse


    ;Variablen zur ListView
    Global $ListView_GetSelect


    Mit freundlichen Grüßen
    Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Hallo @Mikki,
    schau dir nochmal die Hilfe zu _GUICtrlListView_AddSubItem an.
    Der zweite Parameter ist der Index (Zeile minus 1 (nullbasiert)) in der Listview.

    Das heißt, dein SubItem geht immer in die erste Zeile.

    AutoIt
    _GUICtrlListView_AddSubItem($ListView_Bauvorhaben, 0, $LESEN_Input_PLZ, 1, 0)


    Die Hilfe zu _GUICtrlListView_AddItem zeigt, dass diese Funktion den Indexwert (Zeile minus 1) des neuen Elements zurückgibt. Du musst diesen nur speichern und für _GUICtrlListView_AddSubItem verwenden.

    Also statt:

    AutoIt
    _GUICtrlListView_AddItem($ListView_Bauvorhaben, $LESEN_Input_Name_Bauvorhaben, 0)
    _GUICtrlListView_AddSubItem($ListView_Bauvorhaben, 0, $LESEN_Input_PLZ, 1, 0)
    _GUICtrlListView_AddSubItem($ListView_Bauvorhaben, 0, $LESEN_Input_Strasse, 2, 0)

    lieber:

    AutoIt
    $iIndex = _GUICtrlListView_AddItem($ListView_Bauvorhaben, $LESEN_Input_Name_Bauvorhaben, 0)
    _GUICtrlListView_AddSubItem($ListView_Bauvorhaben, $iIndex, $LESEN_Input_PLZ, 1, 0)
    _GUICtrlListView_AddSubItem($ListView_Bauvorhaben, $iIndex, $LESEN_Input_Strasse, 2, 0)

    PS: Beim Erstellen/Bearbeiten eines Beitrags kannst du auch Tags auswählen und die Anzeige von Code verbessern ;)

    Grüße autoiter

  • Du kannst die Listview auch erstellen mit GuiCtrlCreateListview("Spalte1|Spalte2|Spalte3",...)
    Und eine neue Zeile hinzufügen mit GuiCtrlCreateListViewItem("Name|InhaltSpalte2|InhaltSpalte3",$hListview)
    Spart ein paar Zeilen, falls es nicht dynamisch sein muss. Zum löschen,ändern,... würde ich aber die _guictrllistview_... Befehle nutzen :)