Um den gesamten Inhalt eines MSFlexGrid-Controls in einer Datenbank oder Datei zu speichern und bei Bedarf wieder einzulesen, braucht man die Daten nicht mühselig zellenweise abzufragen. Das FlexGrid-Control stellt uns eine Eigenschaft namens Clip zur Verfügung. Mit dieser Eigenschaft lässt sich der Inhalt des gerade ausgewählten Zellenbereichs in einem Rutsch auslesen. Die einzelnen Spalten sind hierbei durch das Tabulator-Zeichen (vbTab) voneinander getrennt, die Zeilen durch ein Zeilenumbruch-Zeichen (vbCrLf). Ebenfalls lässt sich ein entsprechend formatierter Gesamtstring dann über die Clip-Eigenschaft im FlexGrid anzeigen. Die Aufteilung auf die einzelnen Zellen übernimmt das FlexGrid-Control. Um jetzt den gesamten Inhalt des FlexGrid-Controls zu speichern, braucht man also lediglich den gesamten Zellenbereich zu markieren und die Clip-Eigenschaft abzuspeichern: ' FlexGrid-Inhalt in Datei speichern Public Sub FlexGrid_Save(ByVal sFile As String, _ oGrid As MSFlexGrid) Dim nRow As Long Dim nCol As Long Dim nRowSel As Long Dim nColSel As Long Dim F As Integer With oGrid ' aktuelle Selektion merken nRow = .Row nCol = .Col nRowSel = .RowSel nColSel = .ColSel ' Gesamten Zelleninhalt markieren .Row = 0 .Col = 0 .RowSel = .Rows - 1 .ColSel = .Cols - 1 ' Inhalt speichern F = FreeFile Open sFile For Output As #F Print #F, CStr(.Rows) & "," & CStr(.Cols) & ";" & .Clip; Close #F ' ursprüngliche Selektion iederherstellen .Row = nRow .Col = nCol .RowSel = nRowSel .ColSel = nColSel End With End Sub Um die gespeicherten Daten (bei erneutem Start) wieder anzeigen zu können, gehen wir wie folgt vor: ' FlexGrid-Inhalt aus Datei einlesen Public Sub FlexGrid_Read(ByVal sFile As String, _ oGrid As MSFlexGrid) Dim nRows As Long Dim nCols As Long Dim F As Integer Dim sTemp As String Dim sData As String Dim nPos As Long ' Existiert die Datei überhaupt? If Dir$(sFile) <> "" Then ' Datei komplett auslesen F = FreeFile Open sFile For Binary As #F sData = Space$(Lof(F)) Get #F, , sData Close #F ' Anzahl Zeilen und Spalten nPos = InStr(sData, ";") If nPos > 0 Then sTemp = Left$(sData, nPos - 1) sData = Mid$(sData, nPos + 1) nPos = InStr(sTemp, ",") If nPos > 0 Then nRows = Val(Left$(sTemp, nPos - 1)) nCols = Val(Mid$(sTemp, nPos + 1)) ' Grid-Größe (Inhalt) anpassen With oGrid .Clear If .Rows < nRows Then .Rows = nRows If .Cols < nCols Then .Cols = nCols ' Daten anzeigen .Row = 0 .Col = 0 .RowSel = nRows - 1 .ColSel = nCols - 1 .Clip = sData ' Selektion entfernen .RowSel = 0 .ColSel = 0 End With End If End If End If End Sub Der Aufruf erfolgt dann so: ' Grid-Inhalt speichern FlexGrid_Save App.Path & "\Grid.dat", MSFlexGrid1 ' Grid-Inhalt laden und anzeigen FlexGrid_Read App.Path & "\Grid.dat", MSFlexGrid1 Der Inhalt des FlexGrid-Controls lässt sich natürlich auch in einer Datenbank speichern. Am besten man verwendet hierfür ein Memo-Feld. Rs.Fields("Grid") = FlexGrid_GetData(MSFlexGrid1) Oder auch auslesen und anzeigen: FlexGrid_SetData Rs("Memo"), MSFlexGrid1 Die beiden Funktionen FlexGrid_GetData und FlexGrid_SetData sind hierbei wie folgt definiert: ' FlexGrid-Inhalt in Variable speichern Public Function FlexGrid_GetData( _ oGrid As MSFlexGrid) As String Dim nRow As Long Dim nCol As Long Dim nRowSel As Long Dim nColSel As Long With oGrid ' aktuelle Selektion merken nRow = .Row nCol = .Col nRowSel = .RowSel nColSel = .ColSel ' Gesamten Zelleninhalt markieren .Row = 0 .Col = 0 .RowSel = .Rows - 1 .ColSel = .Cols - 1 ' Inhalt zuweisen FlexGrid_GetData = .Clip ' ursprüngliche Selektion wiederherstellen .Row = nRow .Col = nCol .RowSel = nRowSel .ColSel = nColSel End With End Function Public Sub FlexGrid_SetData(ByVal sData As String, _ oGrid As MSFlexGrid) With MSFlexGrid1 ' Daten anzeigen .Row = 0 .Col = 0 .RowSel = .Rows - 1 .ColSel = .Cols - 1 .Clip = sData .RowSel = 0 .ColSel = 0 End With End Sub Dieser Tipp wurde bereits 27.551 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. sevOutBar 4.0 Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |