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