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 28.141 mal aufgerufen.
Anzeige
![]() ![]() ![]() (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. |
Neu! sevCoolbar 3.0 ![]() Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Tipp des Monats ![]() Manfred Bohn IndexOf für mehrdimensionale Arrays Die generische Funktion "IndexOf" ermittelt das erste Auftreten eines bestimmten Wertes in einem n-dimensionalen Array TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR... |
||||||||||||||||
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. |