Seite 1 von 2

ListIconGadget Spaltennamen doppelt beim zweiten füllen

Verfasst: 28.01.2009 20:57
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.

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Verfasst: 28.01.2009 23:55
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

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Verfasst: 29.01.2009 00:18
von Fluid Byte
Kiffi hat geschrieben:das liegt ursprünglich daran, dass Fluid Byte zwei kleine Bugs in seiner RemoveColumns()-Routine hat.
:oops:

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Verfasst: 29.01.2009 00:24
von Kiffi
Fluid Byte hat geschrieben::oops:
Bild

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Verfasst: 29.01.2009 01:01
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....

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Verfasst: 29.01.2009 09:02
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.

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Verfasst: 29.01.2009 12:54
von Andesdaf
Kiffi hat geschrieben:Bild
:lol: der kommt in meine Sammlung!!

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Verfasst: 29.01.2009 14:03
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

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Verfasst: 29.01.2009 14:37
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.

Re: ListIconGadget Spaltennamen doppelt beim zweiten füllen

Verfasst: 29.01.2009 14:53
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