Code: Alles auswählen
EnableExplicit
;Erster Versuch einer Verallgemeinerung von Kiffis Beispiel
;http://www.purebasic.fr/german/viewtopic.php?f=3&t=27566
CompilerIf #PB_Compiler_Unicode
#XmlEncoding = #PB_UTF8
CompilerElse
#XmlEncoding = #PB_Ascii
CompilerEndIf
Define DB.i,Ev.i,EvGad.i,EvWin.i,EvType.i
Define Counter
;Define XML$,ColNames$,ColTypes$,Cols.i,nr.i
UseSQLiteDatabase()
; TestTabelle erzeugen und befüllen
DB = OpenDatabase(#PB_Any, ":memory:", "", "", #PB_Database_SQLite)
DatabaseUpdate(DB, "Create Table TestTable (ArtNr, Anzahl, Bezeichnung, Netto, Brutto)")
For Counter = 1 To 10
DatabaseUpdate(DB, "Insert Into TestTable (ArtNr, Anzahl, Bezeichnung, Netto, Brutto) Values " +
"('ArtNr" + Str(Counter) + "', 'Anzahl" + Str(Counter) + "', 'Bezeichnung" + Str(Counter) + "', 'Netto" + Str(Counter) + "', 'Brutto" + Str(Counter) + "')")
Next
#Dialog = 0
#Xml = 0
Procedure.s get_Column_Names(DBNr.i,Table.s)
;reicht die Spaltenüberschriften der Query(Table) zurück, getrennt durch |
Protected res.s,Query.s,Sp.i
Query="Select * FROM "+Table
If DatabaseQuery(DBNr,Query)
For Sp=0 To DatabaseColumns(DBNr) -1
res=res+ DatabaseColumnName(DBNr,Sp)+"|"
Next
EndIf
;FinishDatabaseQuery(DBNr)
ProcedureReturn res
EndProcedure
Procedure Changed(GadNr.i)
MessageRequester("Change","Gadgetnr="+Str(GadNr))
EndProcedure
Procedure showDataWindow(DBNum.i,Table.s)
Protected ColNames.s,ColTypes.s,Cols.i,XML$,Sp.i,Zeile.i,change.s,GadName.s
ColNames=get_Column_Names(DBNum,Table)
ColTypes="string|spin|combobox|string|date" ;Hier gebe ich willkürliche Gadgettypen für die Spalten vor
Cols=DatabaseColumns(DBNum)
XML$ = "<window id='#PB_Any' name='test' text='Gridbox' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
" <gridbox columns="+"'"+Str(Cols)+"'"+">"
For Sp=1 To Cols
XML$+"<text text="+"'"+StringField(ColNames,Sp,"|") +"'"+" />"
Next
Zeile = 0
If DatabaseQuery(DBNum, "Select * From "+Table)
While NextDatabaseRow(DBNum)
Zeile=Zeile+1
For Sp=1 To Cols
; Problemstelle ******************************************
;change müsste noch in die üpbernachste Zeile eingefügt werden,
; z.B. ...+GadName + change, dann aber passiert Absturz
change=" onchange="+Chr(34 )+"Changed()"+Chr(34)
GadName=" name='"+Str(Zeile)+"|"+Str(Sp)+"' "
XML$+"<"+StringField(ColTypes,Sp,"|") + GadName +" width='100' text='" + GetDatabaseString(DBNum, Sp -1) + "'"+" />"
Next
Wend
FinishDatabaseQuery(DBNum)
EndIf
XML$ + " </gridbox>" +
" </window>"
If CatchXML(#Xml, @XML$, StringByteLength(XML$), 0, #XmlEncoding) And XMLStatus(#Xml) = #PB_XML_Success
If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Else
Debug "Dialog error: " + DialogError(#Dialog)
EndIf
Else
Debug "XML error: " + XMLError(#Xml) + " (Line: " + XMLErrorLine(#Xml) + ")"
EndIf
EndProcedure
showDataWindow(DB,"TestTable")
;Beispiel zur Abfrage: MessageRequester("Inhalt",GetGadgetText(DialogGadget(#Dialog,"8|4"))) ; Inhalt des Gadgets von Zeile 8 und Spalte4
Repeat
Ev=WindowEvent()
If Ev
Select Ev
Case #PB_Event_Gadget
EvGad=EventGadget()
EvType=EventType()
Select EvType
Case #PB_EventType_LostFocus
Changed(EvGad)
EndSelect
EndSelect
EndIf
Until Ev=#PB_Event_CloseWindow