Seite 1 von 2

(Datenbank)-Grid

Verfasst: 31.07.2006 17:04
von garfield9992003
Hallo zusammen.

Gibt es ein brauchbares Grid, um Datensätze tabellarisch darstellen zu können?

Ich habe mir CSGrid und EzGrid angesehen, jedoch benötige ich eine Möglichkeit in dem Grid auch neue Datensätze anlegen zu können.

Habt ihr da noch Ideen (oder doch Ideeen?!) oder Denkanstösse?

Ist ein richtiges Grid in absehbarer Zeit als festes Gedget in Pb geplant?

Grüsse

Frank

Verfasst: 31.07.2006 19:57
von Zaphod
Wahrscheinlich bist du mit solchen Wünschen besser bei Delphi, Visual Basic oder PowerBuilder aufgehoben.

Grid für datensätze

Verfasst: 01.08.2006 09:12
von mike41
Hi garfield!

vielleicht kann dir das helfen arbeite selber schon die ganze zeit damit.
Da sowas nicht existierte hab ich mir selber eins gebastelt.


Code: Alles auswählen

;a ListIconGadget with Binding an a Recordset ; Max 10 Columns
Procedure db_ListIconGadget(num.l,LigNum.l,x.l,y.l,Width.l,Height.l,Titelw.l,Flags.l,Tablename.s) 
                                                                                                   
ListIconGadget(ligNum, x, y, Width, Height, "", Titelw,Flags)
  db_Recordset_Open(num,Tablename,"","")
  column.l = DatabaseColumns(num)
  For col = 0 To column
    colName.s = DatabaseColumnName(num,col)
    AddGadgetColumn(ligNum,col,colName,100)
  Next col
  While NextDatabaseRow(num)
  a.s=GetDatabaseString(num,0)
  b.s=GetDatabaseString(num,1)
  c.s=GetDatabaseString(num,2)
  d.s=GetDatabaseString(num,3)
  e.s=GetDatabaseString(num,4)
  f.s=GetDatabaseString(num,5)
  g.s=GetDatabaseString(num,6)
  h.s=GetDatabaseString(num,7)
  i.s=GetDatabaseString(num,8)
  j.s=GetDatabaseString(num,9)
  AddGadgetItem(ligNum,-1,a+Chr(10)+b+Chr(10)+c+Chr(10)+d+Chr(10)+e+Chr(10)+f+Chr(10)+g+Chr(10)+h+Chr(10)+i+Chr(10)+j)
  Wend
    
EndProcedure 
Die ganze Include kannst Du bei mir runterladen mit Beispieldatei
PS:

http://people.freenet.de/mike.teesch

MfG Mike

Verfasst: 01.08.2006 13:37
von bobobo
Auch kein DBGrid
aber für ne reine Darstellung geht's auch mit folgendem Code.
Dass das Ergebnis vorab erst in einer dynamischen Liste gespeichert
wird muss trotz etwas höherem Speicherverbrauch nicht unbedingt ein
Nachteil sein. Listen kann z.B. man sortieren (sortlist()) oder
sonstwie nett behandeln.

Code: Alles auswählen

If InitDatabase()=0
  MessageRequester("","ODBC zu alt. Ein neueres ODBC gibt's bei Obi",0)
  End
EndIf

Enumeration
  #Window_0
  #ListIcon_0
  #Button_OK
  #Button_Exit
  #Datenbank
EndEnumeration


Procedure Open_Window_0()
  
  If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    
    If CreateGadgetList(WindowID(#Window_0))
      ;-
      ListIconGadget(#ListIcon_0, 0, 120, WindowWidth(#window_0), WindowHeight(#window_0)-120, "", 100)
      ButtonGadget(#Button_OK, 10, 10, 140, 30, "OK - neuladen")
      ButtonGadget(#Button_Exit, 160, 10, 170, 30, "EXIT")
    EndIf
    
  EndIf
  
EndProcedure

Open_Window_0()

NewList result.s()

Repeat
  Event = WaitWindowEvent()
  WindowID = EventWindow()
  GadgetID = EventGadget()
  EventType = EventType()
  
  If event=#PB_Event_SizeWindow
    ResizeGadget(#Listicon_0,0, 120, WindowWidth(#window_0), WindowHeight(#window_0)-120)
  EndIf
  
  If Event = #PB_Event_Gadget
    
    If GadgetID = #ListIcon_0
      
    ElseIf GadgetID = #Button_OK
      query.s="Select * from tabelle" ; hier die Abfrage rein
      DBopen=OpenDatabase(#Datenbank,"Datenbank","User","Passwort")
      row=0

      If DatabaseQuery(#Datenbank,query)
        ClearList (result())
        lout.s=""
        NbColumns = DatabaseColumns(#Datenbank)
        lout+DatabaseColumnName(#datenbank,0)+Chr(10)

        For c=1 To nbcolumns-1
          lout+DatabaseColumnName(#datenbank,c)+Chr(10)
        Next c

        lout=Left(lout,Len(lout)-1)
        ; Liste füllen
        AddElement(result())
        result()=lout
        
        While NextDatabaseRow(#Datenbank)  ; alle Einträge durchlaufen
          lout.s=""
          
          For c=0 To nbcolumns
            lout.s+GetDatabaseString(#Datenbank, c)+Chr(10)
          Next c
          
          While Right(lout,1)=Chr(10)
            lout=Left(lout, Len(lout)-1 )
          Wend
          
          AddElement(result())
          result()=lout
          lout=""
          row+1
        Wend
        
        If dbopen
          CloseDatabase(#Datenbank)
          dbopen=0
        EndIf
        
        ;ListIcon aus Liste bestücken
        FirstElement(result())
        
        felder=CountString(result(),Chr(10))
        ListIconGadget(#Listicon_0,0, 120, WindowWidth(#window_0), WindowHeight(#window_0)-120,StringField(result(),1,Chr(10)),20,#PB_ListIcon_GridLines)
        For c=2 To felder+1
          AddGadgetColumn(#Listicon_0, c, StringField(result(),c,Chr(10)), 20)
        Next c
        
        While NextElement(result())
          
          AddGadgetItem(#Listicon_0,-1,result())
          
        Wend
        ; Breite automatisch anpassen
        For c=0 To felder
          SendMessage_(GadgetID(#Listicon_0),#LVM_SETCOLUMNWIDTH,c,#LVSCW_AUTOSIZE_USEHEADER)
        Next
        
      Else
        Debug query
        Debug "Mag nicht abfragen"
      EndIf
      
    ElseIf GadgetID = #Button_Exit
      
      If dbopen
        CloseDatabase(#Datenbank)
        dbopen=0
      EndIf
      
      End
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
Demo's wie man in Listicons Einträge direkt editieren kann gibt's übrigens im Codearchiv auf purearea.net (El Choni hatte 2003 mal was gemacht was mit ganz wenig Anpassung auch auf PB4 läuft)

Diese Änderung könnte dann auch gleich eine Änderung der Daten in der
Datenbank verursachen.

Es fehlt dann nur noch ein Zufügen von Daten im ListiconGadget (und DB)
in der letzten Zeile.

Verfasst: 01.08.2006 14:53
von mannybass
Hier gibt es eines (kostenpflichtig, $29,95):
http://syberden.net/

Auf der Liberty Basic Seite wird Gutes darüber geschrieben.

Verfasst: 01.08.2006 15:06
von ts-soft
In den PBOSL Examples ist ein Beispiel für RaGrid, unter den Beispielen für
CreateGadget. Bietet zwar keine eingebaute Datenbank-Funktionalität,
irgendwas sollte man schon selber proggen :wink: , hilft aber Geld sparen,
das Grid selber kann eigentlich mehr als das kostenpflichtige

Verfasst: 01.08.2006 15:41
von bobobo
und sowas wird einem jetzt erst gesagt :evil:


:allright:

Verfasst: 01.08.2006 15:44
von ts-soft
bobobo hat geschrieben:und sowas wird einem jetzt erst gesagt :evil:


:allright:
Selber Schuld, wer die Examples nicht lädt und ausprobiert :mrgreen:

Verfasst: 01.08.2006 16:47
von garfield9992003
Danke für eure Antworten. Ich werde mir das am Abend mal gemütlich in den Kopf schrauben und berichten.

Verfasst: 01.08.2006 17:43
von ts-soft