ListIconGadget Spaltennamen doppelt beim zweiten füllen

Anfängerfragen zum Programmieren mit PureBasic.
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

ListIconGadget Spaltennamen doppelt beim zweiten füllen

Beitrag von TheSaint »

Hallo Zusammen,

ich weis einfach nicht woran das liegt, das im ListIconGadget die Spaltennamen doppelt vorhanden sind.

Hier ist der Code den ich benutze:

Code: Alles auswählen

        If DatabaseQuery(db, SQL)
            ClearGadgetItems(#Listview_0)
            RemoveColumns(#Listview_0)
            ;***** Spaltenüberschriften erstellen
            Spalten = DatabaseColumns(db) - 1 
            For Spalte = 0 To Spalten ; Überschrift erstellen
                SpTyp.l = DatabaseColumnType(db, Spalte)
                ListSort(SpTyp, Spalte)
                AddGadgetColumn(#Listview_0,0,DatabaseColumnName(db, Spalten-Spalte),90)
            Next
Nach jeder SQL Abfrage füge ich am Ende folgendes ein:

Code: Alles auswählen

FinishDatabaseQuery(db)

Beim ersten Aufruf der Query, wird das ListIconGadget korrekt gefüllt.
Beim zweiten Aufruf, werden die Spaltennamen doppelt angezeigt, und zwar so:

Spaltenname 1, Spaltenname 2, Spaltenname3 dann wieder Spaltenname 1, Spaltenname 2, usw.

Beim dritten Aufruf, analog zum zweiten kommt der Spaltenname 1 zum dritten mal vor usw.

Ich finde einfach nicht heraus was ich machen muss damit das nicht mehr so ist. Ich habe sogar die Spalten gelöscht, die Zeilen gelöscht, aber trotzdem beim zweiten Aufruf, und bei jedem weiteren Aufruf und Füllen des Gadgets geht das o. g. Bsp. immer weiter.

Könnte mir bitte jemand helfen. Wäre toll.

Schon mal vielen Dank.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Beitrag von Kiffi »

TheSaint hat geschrieben:ich weis einfach nicht woran das liegt, das im ListIconGadget die Spaltennamen doppelt vorhanden sind.
das liegt ursprünglich daran, dass Fluid Byte zwei kleine Bugs in seiner
RemoveColumns()-Routine hat. Ist mir aber auch erst aufgefallen, als ich
meinen Beispielcode so gut wie fertig hatte. Deshalb hier noch mal der
Vollständigkeit halber:

Code: Alles auswählen

EnableExplicit

#myWindow = 0
#myButton1 = 0
#myButton2 = 1
#myListIconGadget = 3

UseSQLiteDatabase()

Global DB = OpenDatabase(#PB_Any, ":memory:", "", "", #PB_Database_SQLite)

Define WWE

Procedure CreateAndFillTables()
  
  Protected Counter
  
  ; Tabelle 1
  DatabaseUpdate(DB, "Create Table myTable1 (Table1Field1, Table1Field2, Table1Field3)") 
  For Counter = 1 To 9
    DatabaseUpdate(DB, "Insert Into myTable1 (Table1Field1, Table1Field2, Table1Field3) Values ('Table1Field1Value" + Str(Counter) + "', 'Table1Field2Value" + Str(Counter) + "', 'Table1Field3Value" + Str(Counter) + "')") 
  Next
  
  ; Tabelle 2
  DatabaseUpdate(DB, "Create Table myTable2 (Table2Field1, Table2Field2, Table2Field3)") 
  For Counter = 1 To 9
    DatabaseUpdate(DB, "Insert Into myTable2 (Table2Field1, Table2Field2, Table2Field3) Values ('Table2Field1Value" + Str(Counter) + "', 'Table2Field2Value" + Str(Counter) + "', 'Table2Field3Value" + Str(Counter) + "')") 
  Next
  
EndProcedure

Procedure RemoveColumns(gadget)
  Protected hwndHeader = SendMessage_(GadgetID(gadget), #LVM_GETHEADER, 0, 0)
  Protected Count = SendMessage_(hwndHeader, #HDM_GETITEMCOUNT, 0, 0)
  Protected i
  For i = Count To 0 Step -1
    RemoveGadgetColumn(gadget, i)
  Next
EndProcedure 

Procedure FillListIconGadget(ListIconGadget, Query.s)
  
  Protected Counter
  Protected DatabaseLine.s
  
  ClearGadgetItems(ListIconGadget)
  RemoveColumns(ListIconGadget)
  
  If DatabaseQuery(DB, Query)
    For Counter = 0 To DatabaseColumns(DB) - 1
      AddGadgetColumn(ListIconGadget, Counter, DatabaseColumnName(DB, Counter), 120) 
    Next
    While NextDatabaseRow(DB)
      DatabaseLine = ""
      For Counter = 0 To DatabaseColumns(DB) - 1
        DatabaseLine + GetDatabaseString(DB, Counter)
        If Counter < DatabaseColumns(DB) - 1
          DatabaseLine + #LF$
        EndIf
      Next
      AddGadgetItem(ListIconGadget, -1, DatabaseLine)
    Wend
    FinishDatabaseQuery(DB)
  EndIf
  
EndProcedure

CreateAndFillTables()

OpenWindow(#myWindow, #PB_Ignore, #PB_Ignore, 500, 500, "")
ButtonGadget(#myButton1,   5, 5, 100, 20, "Query1")
ButtonGadget(#myButton2, 110, 5, 100, 20, "Query2")
ListIconGadget(#myListIconGadget, 0, 30, 500, 470, "", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)

FillListIconGadget(#myListIconGadget, "Select * From myTable1")
  
Repeat
  
  WWE = WaitWindowEvent()
  
  Select WWE
      
    Case #PB_Event_Gadget
      
      Select EventGadget()
          
        Case #myButton1
          FillListIconGadget(#myListIconGadget, "Select * From myTable1")
          
        Case #myButton2
          FillListIconGadget(#myListIconGadget, "Select * From myTable2")
          
      EndSelect
      
  EndSelect
  
Until WWE = #PB_Event_CloseWindow
Dein AddGadgetColumn() scheint mir ein wenig seltsam zu sein. Du fügst
die neuen Spalten immer an Position 0 ein. Ist das so gewollt?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Beitrag von Fluid Byte »

Kiffi hat geschrieben:das liegt ursprünglich daran, dass Fluid Byte zwei kleine Bugs in seiner RemoveColumns()-Routine hat.
:oops:
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Beitrag von Kiffi »

Fluid Byte hat geschrieben::oops:
Bild
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Beitrag von marco2007 »

Fluid Byte hat geschrieben: :oops:
...ne, finde ich nicht. Peinlich ist der 37k Code vom X360 Andy :mrgreen:
Du könntest aber Deinen Code im anderen Thread anpassen...Du weißt schon, falls jemand nach so einem Code sucht....
Windows 11 - PB 6.03 x64
_________________________________
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Beitrag von TheSaint »

Hallo Kiffi,
Kiffi hat geschrieben:
TheSaint hat geschrieben:ich weis einfach nicht woran das liegt, das im ListIconGadget die Spaltennamen doppelt vorhanden sind.
das liegt ursprünglich daran, dass Fluid Byte zwei kleine Bugs in seiner
RemoveColumns()-Routine hat. Ist mir aber auch erst aufgefallen, als ich
meinen Beispielcode so gut wie fertig hatte. Deshalb hier noch mal der
Vollständigkeit halber:
Vielen Dank, dass Du Dir das angesehen hast und eine Lösung gefunden hast.
Dein AddGadgetColumn() scheint mir ein wenig seltsam zu sein. Du fügst
die neuen Spalten immer an Position 0 ein. Ist das so gewollt?
Ja, das ist so gewollt, da ich in verschiedenen StringGadgets Suchwerte eingebe und dadurch die SQL-Abfrage aufbaue.
Die Spaltennamen können sich bei den verschiedenen SQL-Abfragen verändern, deshalb beginne ich immer wieder bei null.
Oder mache ich da einen Denkfehler? Geht das auch anders??

Nochmals vielen Dank für Deine Hilfe. Bin begeistert.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Beitrag von Andesdaf »

Kiffi hat geschrieben:Bild
:lol: der kommt in meine Sammlung!!
Win11 x64 | PB 6.20
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Beitrag von Kiffi »

TheSaint hat geschrieben:Ja, das ist so gewollt, da ich in verschiedenen StringGadgets Suchwerte eingebe und dadurch die SQL-Abfrage aufbaue.
Die Spaltennamen können sich bei den verschiedenen SQL-Abfragen verändern, deshalb beginne ich immer wieder bei null.
Oder mache ich da einen Denkfehler? Geht das auch anders??
Hast Du Dir meinen Code überhaupt schon einmal angeschaut?

Grüße ... Kiffi
a²+b²=mc²
TheSaint
Beiträge: 143
Registriert: 21.12.2008 18:59

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Beitrag von TheSaint »

Hallo Kiffi,
Kiffi hat geschrieben: Hast Du Dir meinen Code überhaupt schon einmal angeschaut?
Ja und Nein. :) Bin noch dabei in durchzuarbeiten.
Da ich den Code verstehen möchte, dauert es leider etwas, sorry,
dass ich nicht so schnell bin.

Hatte nur auf Deine Frage geantwortet bezüglich des AddGadgetColumn(), warum ich das so gemacht habe.

Nochmals vielen Dank.
Gruß, TheSaint
___________________________
[ XP Prof SP 3 | Vista | PB 4.30 ]
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Beitrag von Kiffi »

TheSaint hat geschrieben:Da ich den Code verstehen möchte, dauert es leider etwas, sorry,
dass ich nicht so schnell bin.
kein Thema. Kurz gesagt: Auch ich baue die Spalten des ListIconGadget aus
den Datenbankspalten zusammen, die mir die Abfrage zurückliert. Allerdings
baue ich im Gegensatz zu Dir die Spalten von 0 bis DatabaseColumns - 1 auf.

Grüße ... Kiffi
a²+b²=mc²
Antworten