vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Das hier sollte Dir eigentlich schon weiterhelfen 
Autor: Tolwyn
Datum: 22.08.01 14:16

Hier sind einige Funktion, die Daten zwischen einem Grid und einem Zweidimensionalem Array austauschen.

Leider ist MS fest davon überzeugt, das ich nach der 499ten Zeile in dem Grid keinen Speicher mehr haben kann (Dabei hab ich noch über 200 MB realen Speicher frei). Deshalb habe ich mir erlaubt MaxRows auf 498 zu setzten. Das sind dann genau 700 Spalten und 499 Zeilen, weil das Grid jeweils bei 0 anfängt zu zählen.

Die Funktion cmdGen_Click habe ich der Vollständigkeit halber mal beigefügt. Sie erzeugte für mich ein Beispiel Grid.
GridToArray kopiert alle Zellenwerte in ein Zweidimensionales Array.
ArrayToGrid kopier ein Zweidimensionales Array in ein Grid (Vorher musst Du aber noch die Rows & Cols des Grids auf die richtigen werte setzten)

Wenn Du noch Fragen hast, oder Dir noch etwas fehlt, melde Dich einfach noch mal.

Option Explicit
 
Dim SimTab()    As Double
'Dim oTime       As New BSTimer
 
Const MaxRows = 499
Const MaxCols = 700
 
 
Private Sub cmdGen_Click()
  Dim i, ii         As Long
  Dim sRow          As String
 
  Screen.MousePointer = vbHourglass
  MSFlexGrid1.Visible = False
  ' Nur damit die nächste Anweisung keinen Fehler ergibt
  MSFlexGrid1.FixedRows = 0     
  MSFlexGrid1.Rows = 0
  MSFlexGrid1.Cols = MaxCols
  ' Kopfzeile erstellen
  sRow = "Spalte 0" & vbTab
  For i = 1 To MaxCols
    sRow = sRow & "Spalte " & i & vbTab
  Next
  MSFlexGrid1.AddItem sRow
  ' Nun die 498 Rows erstellen
  For i = 0 To MaxRows - 1
    DoEvents
    ' Jede Zelle erhält einen zufälligen Double Wert
    sRow = Format(CDbl((1500 * Rnd)), "###0.00")
    For ii = 1 To MaxCols - 1
      sRow = sRow & vbTab & Format(CDbl((1500 * Rnd)), "###0.00")
    Next ii
    ' Den erstellten String als neue Row anhängen
    MSFlexGrid1.AddItem sRow
  Next i
  ' Nun haben wir ein Grid mit 498 Zeilen & 699 Spalten
  ' (Die Zäler des MsFlexGrid beginnen jeweils bei 0. Deshalb auch
  ' nur 699 Spalten!)
  MSFlexGrid1.FixedRows = 1
  MSFlexGrid1.Visible = True
  Screen.MousePointer = vbNormal
End Sub
 
Private Sub cmdToArray_Click()
  'oTime.StartTimer
  Call GridToArray(Me.MSFlexGrid1, SimTab())
  'oTime.StopTimer
  'Debug.Print "Time: " & oTime.ReachedTime
  'Debug.Print "Durchschnitt: " & oTime.Average & " für " & oTime.Counter & "" & _
    "Durchläufe"
End Sub
 
Sub GridToArray(oGrid As MSFlexGridLib.MSFlexGrid, sMArray() As Double)
  ' Entragen des gesamten Grids in ein Mehrdimensionales Array
  Dim lRowCount     As Long
  Dim lColCount     As Long
  Screen.MousePointer = vbHourglass
  ' Array Dimensionieren
  ReDim sMArray(0 To MaxRows - 1, 0 To MaxCols - 1)
  ' Schleife um alle Rows (bei 1 beginnen, weil die Kopfzeile nicht ins array 
  ' soll)
  For lRowCount = 1 To oGrid.Rows - 1
    ' Schleife um alle Cols in das Array zu bekommen
    For lColCount = 0 To oGrid.Cols - 1
      'Debug.Print MSFlexGrid1.TextMatrix(lRowCount, lColCount)
      sMArray(lRowCount - 1, lColCount) = MSFlexGrid1.TextMatrix(lRowCount, _
        lColCount)
    Next
  Next lRowCount
  Screen.MousePointer = vbNormal
End Sub
 
Sub ArrayToGrid(oGrid As MSFlexGridLib.MSFlexGrid, sMArray() As Double)
  ' Entragen des gesamten Grids aus ein Zweidimensionalen Array
  Dim lRowCount     As Long
  Dim lColCount     As Long
  Screen.MousePointer = vbHourglass
  oGrid.Visible = False
  ' Schleife um die erste Dimension
  ' Ich habe eine Kopfzeile vorgesehen deshalb Start bei 1
  For lRowCount = 1 To UBound(sMArray(), 1) 
    ' Schleife um die zweite Dimension
    For lColCount = 0 To UBound(sMArray(), 2)
      'Debug.Print MSFlexGrid1.TextMatrix(lRowCount, lColCount)
      oGrid.TextMatrix(lRowCount, lColCount) = sMArray(lRowCount - 1, lColCount)
    Next
  Next lRowCount
  oGrid.Visible = True
  Screen.MousePointer = vbNormal
End Sub
 
Anstatt in der Funktion ArrayToGrid mit MSFlexGrid1.TextMatrix zu arbeiten _
  kannst Du 
das auch mit der Add Methode des Grids machen, dann musst du vorher die Anzahl _
der 
Zeilen nicht festlegen.
 
Beispiel:
  oGrid.Rows = 1 ' Kopfzeile
  Dim sRow      As String
  For lRowCount = 1 To UBound(sMArray(), 1) + 1 ' +1 wegen der Kopfzeile
    ' Schleife um alle Cols in das Array zu bekommen
    sRow = sMArray(lRowCount - 1, 0) & vbTab
    For lColCount = 1 To UBound(sMArray(), 2)
      sRow = sRow & sMArray(lRowCount - 1, lColCount) & vbTab
    Next
    oGrid.AddItem sRow
  Next lRowCount
Cu
Tolwyn
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
MSFlrxGrid als Array91Walter22.08.01 11:19
Kleine Frage dazu67Tolwyn22.08.01 11:54
Das hier sollte Dir eigentlich schon weiterhelfen71Tolwyn22.08.01 14:16
Re: Das hier sollte Dir eigentlich schon weiterhelfen56Walter22.08.01 20:01

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel