_GUICtrlListView

  • Hallo zusammen,
    leider konnte ich was mein Problem betrifft keine Informationen finden, so das ich euch mal fragen wollte ob das möglich ist was mir vorschwebt und wie man das umsetzen könnte.

    Hintergrund:
    Ich habe ein Script geschrieben womit ich was super läuft, nach bestimmten Eingaben eine SQL Abfrage starte, das Ergebnis dieser Abfrage wird über ein Array dann an ein _GUICtrlListView weitergegeben.

    Ziel:
    Damit der Anwender nicht von sich aus diese Abfrage immer wieder neu starten muss, wollte ich ein Automatik einbauen die diese Abfrage alle 60 Sek. neu startet.

    Problem:
    Damit die Abfrage nicht in eine Endlosschleife läuft wäre es von meiner Seite aus sinnvoll die Summe einer Spalte zu berechnen und wenn diese = 0 ist soll der die Automatik abbrechen.
    Bei dem Inhalt der Spalten handelt es sich um Zahlen

    Da das Script etwas größer ist und Firmenintern hoffe ich das euch die Infos reichen die ich hier einstelle ohne das ich das Script erstmal umarbeiten muss.

    Die Spalten vom ListView sehen so aus, wobei ich die Summe der Spalte 4 benötige.

    $Listview2 = GUICtrlCreateListView("1", 2, 270, 600, 150)
    _GUICtrlListView_AddColumn($ListView2, "2", 50)
    _GUICtrlListView_AddColumn($ListView2, "3", 90)
    _GUICtrlListView_AddColumn($ListView2, "4", 90)
    _GUICtrlListView_AddColumn($ListView2, "5", 90)
    _GUICtrlListView_AddColumn($ListView2, "6", 90)
    _GUICtrlListView_AddColumn($ListView2, "7", 90)

    Die Werte werden mittels
    _GUICtrlListView_AddArray($ListView2, $aArray)
    vom Array das wie folgt aufgebaut ist in das ListView eintragen.

    _Array2DInsert($aArray, $Zeile_array, $eingabe&"|"&$String_Abt[2]&"|"&$String_Abt[4]&"|"&changeNumber(StringFormat('%.2f',$Summe0), '.', ',')&"|"&changeNumber(StringFormat('%.2f',$Summe1), '.', ',')&"|"&changeNumber(StringFormat('%.2f',$Summe2), '.', ',')&"|"&changeNumber(StringFormat('%.2f',$Diff), '.', ','))


    Bis auf die If Then Formel bin ich noch nicht weitergekommen.

    If <Prüfen ob die Summe > 0 ist> Then
    start()
    Else
    MsgBox(0,"text","Es wurden alle Werte verabreitet")
    EndIf

    Das wäre die Einfache Methode wenn sowas möglich ist, am liebsten wäre mir ein Countdown der Runterzählt im GUI wann die nächste automatische Aktualisierung laufen wird.

    Ich hoffe ich habe mich verständlich ausgedrückt, falls noch Infos fehlen einfach fragen.

  • So ganz verstehe ich nicht was du willst. Wenn die Summe der Spalten berechnest wird die entweder immer null sein oder nie. Da du ja dem Listview mit _GUICtrlListView_AddArray immer einfach neue Werte hinzufügt. Sprich deine Abfrage wird nie oder immer greifen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Sieh dir das mal an:

    [autoit]

    ;_getColumnSumme()
    ;Parameter: $Listview Handle der Listview
    ; $column Spalte der Listview
    ;Return: Summe der Spalte
    Func _getColumnSumme($ListView,$column)
    $Number=0
    for $i=0 to _GUICtrlListView_GetItemCount($ListView) step 1
    $Number+=int(_GUICtrlListView_GetItem($ListView,$i,$column)[3])
    next
    EndFunc

    [/autoit]

    Habs jetzt nicht getestet. Sollte aber funktionieren.
    (Ich hoffe ich hab dich richtig verstanden ;))

  • Hallo,
    leider habe ich erst heute Zeit das ganze mal zu testen
    @chip
    Vielleicht habe ich mich bei der Beschreibung etwas doof ausgedrückt.Die Summenberechnung soll erst dann stattfinden wenn alle Schleifen beendet sind und das ListView gefüllt ist.

    @'Kanashius
    Wenn ich deine func ins Script einbinde bekomme ich folgende Fehlermeldung
    .C:\SQL\SQL.au3(210,62)
    : ERROR: syntax error$Number+=int(_GUICtrlListView_GetItem($ListView2,$i,$column)[~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

  • Na dann Rechne doch gleich die Werte welche beim _Array2DInsert hinzufügst zusammen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hallo zusammen,
    man gut das man mal abschalten kann und nun habe ich eine Lösung gefunden.
    Vielleicht nicht die beste aber sie funzt.

    [autoit]

    $i = 0
    $Gesamt = 0
    While 1
    $Einzel = _GUICtrlListView_GetItemText($ListView2, $i,3)
    If $olaf = "" Then
    ExitLoop
    Else
    $Gesamt = $Gesamt + $Einzel
    EndIf
    $i = $i + 1
    WEnd
    If $Gesamt > 0 Then
    sleep(10000)
    _start()
    Else
    EndIf

    [/autoit]

    Aber danke für den Gedankenanstoß