Hallo winfu,
guten Tag Raymond,
wie versprochen stelle ich hier meinen Ansatz zur Lösung der von winfu gestellten Aufgabe vor, DB-Daten in einem Gitter - hier GridView - anzuzeigen. Zuerst werde ich die beiden wichtigsten Prozeduren vorstellen und dann folgt das Quellcode-Archiv des Projektes zum Download, um die Lösung mit geeigneten DB-Daten nachvollziehen zu können sowie alle Projekt-Details zu sehen. Als Datenbank-Engine dient SQLite3.
Teil1:
Code: Alles auswählen
PUBLIC SUB btnDatenImGitterAnzeigen_Click()
DIM iDatensatzNummer, iSpaltenNummer, k AS Integer
sSQL_Anweisung = "SELECT * FROM " & sDB_TabellenName
' sSQL_Anweisung = "SELECT ID,Vorname,Nachname,Wohnort FROM " & sDB_TabellenName
' sSQL_Anweisung = "SELECT ID,Vorname,Nachname,Wohnort,PLZ,Strasse,EMailAdresse FROM " & sDB_TabellenName
' sSQL_Anweisung = "SELECT * FROM " & DataSource1.Table & " WHERE ID>3 ORDER BY Nachname"
MDataBase.rDBResult = MDataBase.cDBVerbindung.Exec(sSQL_Anweisung)
IF MDataBase.rDBResult.Count = 0 THEN
Message.Info("Die Anzahl der selektierten Datensätze ist Null!")
RETURN
ENDIF
FMain.Mouse = Mouse.Wait
Reset()
IF MDataBase.rDBResult.Available THEN
' Zur Kontrolle: PRINT "Anzahl der Datensätze = " & MDataBase.rDBResult.Count
' Zur Kontrolle: PRINT "Anzahl der Felder = " & MDataBase.rDBResult.Fields.Count
aFeldnamenListe.Resize(MDataBase.rDBResult.Fields.Count) ' Variante mit Resize
FOR iSpaltenNummer = 0 TO MDataBase.rDBResult.Fields.Count - 1
aFeldnamenListe[iSpaltenNummer] = MDataBase.rDBResult.Fields[iSpaltenNummer].Name
' Zur Kontrolle: PRINT "Feldname[" & iSpaltenNummer & "] = " & aFeldnamenListe[iSpaltenNummer]
NEXT
MDataBase.rDBResult.MoveFirst
FOR iDatensatzNummer = 0 TO MDataBase.rDBResult.Count - 1
aDatensatz = NEW Variant[]
FOR iSpaltenNummer = 0 TO MDataBase.rDBResult.Fields.Count - 1
' Variante ohne Resize ---> dann funktioniert die Methode .Add
aDatensatz.Add(MDataBase.rDBResult[iSpaltenNummer])
' Zur Kontrolle: PRINT aDatensatz[iSpaltenNummer]
NEXT ' Feld
aDBDatenMatrix.Add(aDatensatz)
MDataBase.rDBResult.MoveNext
NEXT ' Datensatz
ENDIF ' MDataBase.rDBResult.Available
FMain.Mouse = Mouse.Default
grdWerteTabelle.Columns.Count = MDataBase.rDBResult.Fields.Count
grdWerteTabelle.Columns[0].Width = 25
FOR iSpaltenNummer = 0 TO MDataBase.rDBResult.Fields.Count - 1
grdWerteTabelle.Columns[iSpaltenNummer].Title = aFeldnamenListe[iSpaltenNummer]
NEXT ' Feldname aus der Liste
grdWerteTabelle.Rows.Count = aDBDatenMatrix.Count ' Jetzt wird das Gitter gezeichnet!
grdWerteTabelle.SetFocus
' Sprung in die erste Datenzeile --->
' grdWerteTabelle.MoveTo(0, 0)
' Sprung in die letzte Datenzeile --->
grdWerteTabelle.MoveTo(MDataBase.rDBResult.Count - 1, 0)
' Navigation durch die Anzeige im GridView mit 6 Möglichkeiten:
' Pos1-Taste ---> 1. Zeile
' Ende-Taste ---> letzte Zeile
' Bild-nach-unten-Taste ---> letzte Zeile im GridView
' Bild-nach-oben-Taste ---> erste Zeile im GridView
' Nach-oben-Taste ---> Scrollen nach oben
' Nach-unten-Taste ---> Scrollen nach unten
' Erweiterungen:
' Mit dem Ereignis grdWerteTabelle_ColumnClick(Column AS Integer)
' kann man realisieren, die Daten im Gitter zu sortieren.
' LINK: http://old.nabble.com/-ASK--How-to-sort-Gridview--to29958078.html#a29959457
' Das setzt aber voraus, dass man den Programmablauf neu gestaltet!
END ' btnDatenImGitterAnzeigen
Teil2:
Code: Alles auswählen
PUBLIC SUB grdWerteTabelle_Data(Row AS Integer, Column AS Integer)
grdWerteTabelle.Data.Text = aDBDatenMatrix[Row][Column]
IF row MOD 2 = 0 THEN grdWerteTabelle.Data.Background = Color.RGB(224, 224, 224) ' hellgrau
' Bestimmte Felddaten hervorzuheben:
' IF Val(aMatrix[Row][Column]) = 0 THEN
' grdWerteTabelle.Data.Background = Color.RGB(255, 95, 95) ' hellrot
' grdWerteTabelle.Data.Foreground = Color.White
' ENDIF ' Feldinhalt = Zahl 0?
IF aDBDatenMatrix[Row][Column] = "Osterburg" OR aDBDatenMatrix[Row][Column] = "Berlin" THEN
grdWerteTabelle.Data.Background = Color.RGB(255, 95, 95) ' hellrot
grdWerteTabelle.Data.Foreground = Color.White
ENDIF ' Feldinhalt = ausgewählter Wohnort?
END ' grdWerteTabelle_Data
Download:
Interessanter als die Ausgabe der Datenbankdaten im Formular in einem eigenen, nicht datensensitiven Gitter sind die Ausgaben der Datenbankdaten in eine XML-Datei verbunden mit geeigneten Styleanweisungen, in eine (X)HTML-Datei oder mit eigenen DB-Report-Formaten oder auf einen Drucker.
Mit freundlichem Gruß
Honsek