Nur für 32Bit Office Versionen
unter MS-Access ab Version 2000 sein und ist bei weitem nicht vollständig.
Die Hinweise beziehen sich auf die Bsp-DB des beiliegenden Downloads.
Einführung:
Das SGrid2-Control ist ein Datagrid von vbAccelerator
Eigentlich ist dieses Grid für VB5/6 geschrieben worden. Aber es kann auch unter MS-Access
eingesetzt werden. Und das möchte ich hier in diesem Workshop zeigen wie.
Jetzt wird sich mancher fragen, ja ein Datagrid na und, in Access habe ich doch das Listenfeld und
Unterformulare. Mit dem Control könnt Ihr aber Dinge darstellen das geht mit den herkömmlichen Möglichkeiten nicht.
Hier mal zur Einstimmung 2 Screenshots aus dem Downloadanhang.
Voraussetzungen:
Das Bsp ist unter A00-A07 lauffähig.
Das Control ("vbalSGrid6.ocx") selbst ist in der Setup-Datei enthalten.'
Genauere Infos und der Sourcecode des Controls findet Ihr auf der Homepage des Autors
Im Setup sind noch ein weiteres OCX und zwei DLL's enthalten
Die beiden DLL's (SSubTmr.dll und SSubTmr6.dll) sind für die Funktionalität
der Controls erforderlich und müssen auf dem Zielsystem registriert werden (übernimmt hier das Setup)
Dann kommt noch vbAccelerator ImageList Control and Class v2.0 zum Einsatz.
Diese Imagelist hat ggü. der Imagelist von MS den Vorteil das man nachträglich
die Größe und Farbtiefe der Icons ändern kann.
Formularentwurf
Menü -> Einfügen -> ActiveX-Steuerelement
In der Liste das Control auwählen (roter Rahmen) und OK klicken.
Intellisense anzuzeigen.
Das kann aber auch realisiert werden.
1 2 3 |
Option Compare Database Option Explicit Dim oSGrid As vbAcceleratorSGrid6.vbalGrid |
1 2 3 4 5 6 |
Private Sub Form_Load() Set oSGrid = Me!vbalGrid1.Object End Sub Private Sub Form_Unload(Cancel As Integer) Set oSGrid = Nothing End Sub |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Private Sub InitialiseGrid() With oSGrid 'Setzen der Zeilenhöhe .DefaultRowHeight = 30 'Zuweisen das jede 2. Zeile eine andere Farbe hat .AlternateRowBackColor = RGB(252, 252, 230) 'Zuweisen der Imagelist .ImageList = Me!vbalImageList1.hIml 'Hinzufügen der Spaltenköpfe und deren Eigenschaften .AddColumn "ID", "ID", 0, , 50, True, , , , , , CCLSortNumeric .AddColumn "Artikel", "Artikel", 0, , 200, True, , , , , , CCLSortString .AddColumn "Lieferant", "Lieferant", 0, , 150, True, , , , , , CCLSortString .AddColumn "Katogrie", "Katogrie", 0, , 100, True, , , , , , CCLSortString .AddColumn "Einzelpreis", "Einzelpreis", ecgHdrTextALignRight, , 100, , , , , "#.00", , CCLSortNumeric End With End Sub |
Genaueres im Objektkatalog.
2. Parameter: Bezeichnung des Spaltenkopfs die im Grid erscheinen soll
3. Parameter: Ausrichtung der Spaltenbezeichnung
6. Parameter: Spalte sichtbar
10. Parameter: Formatstring
12. Parameter: Feldtyp für die Sortierung
die Daten dem Grid hinzu gefügt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Private Sub addData() Dim rss As DAO.Recordset Dim sSQL As String Dim lRow As Long Set rss = CurrentDb.OpenRecordset("qry_Artikel") rss.MoveLast lRow = rss.RecordCount rss.MoveFirst With oSGrid .Rows = lRow For lRow = 1 To .Rows .RowHeight(lRow) = 20 .CellDetails lRow, 1, rss!Art_Nr, DT_RIGHT .CellDetails lRow, 2, rss!Artikelname .CellDetails lRow, 3, rss!Firma .CellDetails lRow, 4, rss!Kategoriename .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT rss.MoveNext Next lRow End With rss.Close End Sub |
1 2 3 4 5 |
Private Sub Form_Load() Set oSGrid = Me.vbalGrid1.Object InitialiseGrid addData End Sub |
Also weiter.
und Icons der entsprechenden Kategorie zugeordnet werden.
Dafür bohren wir die Prozedur "addData()" auf.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
If rss!Kategoriename = "Fleischprodukte" Then .CellDetails lRow, 4, rss!Kategoriename, , 0 ElseIf rss!Kategoriename = "Getreideprodukte" Then .CellDetails lRow, 4, rss!Kategoriename, , 1 ElseIf rss!Kategoriename = "Getränke" Then .CellDetails lRow, 4, rss!Kategoriename, , 2 ElseIf rss!Kategoriename = "Gewürze" Then .CellDetails lRow, 4, rss!Kategoriename, , 3 ElseIf rss!Kategoriename = "Meeresfrüchte" Then .CellDetails lRow, 4, rss!Kategoriename, , 4 ElseIf rss!Kategoriename = "Milchprodukte" Then .CellDetails lRow, 4, rss!Kategoriename, , 5 ElseIf rss!Kategoriename = "Naturprodukte" Then .CellDetails lRow, 4, rss!Kategoriename, , 6 ElseIf rss!Kategoriename = "Süßwaren" Then .CellDetails lRow, 4, rss!Kategoriename, , 7 End If |
der Anzeige im Imagelistcontrol, bei 0 beginnt.
Folgende Kriterien habe ich mal genommen.
>=10 und <20 Textfarbe Schwarz, Zellhintergrund Gelb, Schrift normal
<10 Textfarbe Schwarz, Zellhintergrund Grün, Schrift normal
Für jede Änderung wäre eine neue Zuweisung der Variable "Fnt" erforderlich
bzw. zusätzliche Variablen.
1 2 3 4 5 6 7 |
Dim Fnt As Font Set Fnt = New StdFont With Fnt .Name = "Arial" .Bold = True .Size = 14 End With |
gesetzt werden müssen.
1 2 3 4 5 6 7 8 9 |
If rss!Einzelpreis >= 100 Then .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , , &HFF, Fnt ElseIf rss!Einzelpreis >= 20 And rss!Einzelpreis < 100 Then .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , &H80FFFF ElseIf rss!Einzelpreis >= 10 And rss!Einzelpreis < 20 Then .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , , &HFF0000 Else .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , &HFF00&, &H0 End If |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
Private Sub addData() Dim rss As DAO.Recordset Dim sSQL As String Dim lRow As Long, nRow As Long Dim Fnt As Font Set rss = CurrentDb.OpenRecordset("qry_Artikel") rss.MoveLast nRow = rss.RecordCount rss.MoveFirst Set Fnt = New StdFont With Fnt .Name = "Arial" .Bold = True .Size = 14 End With With oSGrid .Rows = nRow For lRow = 1 To .Rows .RowHeight(lRow) = 20 .CellDetails lRow, 1, rss!Art_Nr, DT_RIGHT .CellDetails lRow, 2, rss!Artikelname .CellDetails lRow, 3, rss!Firma If rss!Kategoriename = "Fleischprodukte" Then .CellDetails lRow, 4, rss!Kategoriename, , 0 ElseIf rss!Kategoriename = "Getreideprodukte" Then .CellDetails lRow, 4, rss!Kategoriename, , 1 ElseIf rss!Kategoriename = "Getränke" Then .CellDetails lRow, 4, rss!Kategoriename, , 2 ElseIf rss!Kategoriename = "Gewürze" Then .CellDetails lRow, 4, rss!Kategoriename, , 3 ElseIf rss!Kategoriename = "Meeresfrüchte" Then .CellDetails lRow, 4, rss!Kategoriename, , 4 ElseIf rss!Kategoriename = "Milchprodukte" Then .CellDetails lRow, 4, rss!Kategoriename, , 5 ElseIf rss!Kategoriename = "Naturprodukte" Then .CellDetails lRow, 4, rss!Kategoriename, , 6 ElseIf rss!Kategoriename = "Süßwaren" Then .CellDetails lRow, 4, rss!Kategoriename, , 7 End If If rss!Einzelpreis >= 100 Then .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , , &HFF, Fnt ElseIf rss!Einzelpreis >= 20 And rss!Einzelpreis < 100 Then .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , &H80FFFF ElseIf rss!Einzelpreis >= 10 And rss!Einzelpreis < 20 Then .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , , &HFF0000 Else .CellDetails lRow, 5, rss!Einzelpreis, DT_RIGHT, , &HFF00&, &H0 End If rss.MoveNext Next lRow End With rss.Close End Sub |
1 2 3 4 5 |
Private Sub vbalGrid1_SelectionChange(ByVal lRow As Long, ByVal lCol As Long) With oSGrid MsgBox "Zeile: " & lRow & vbNewLine & "Spalte: " & lCol & vbNewLine & .CellText(lRow, lCol) End With End Sub |
1 |
oSGrid.Clear |
Wird es so aufgerufen:
1 |
oSGrid.Clear True
|
1 2 3 4 |
'Ausblenden der Spalte ID oSGrid.ColumnVisible("ID") = False 'Einblenden der Spalte ID oSGrid.ColumnVisible("ID") = True |
1 2 |
oSGrid.AllowGrouping = True oSGrid.AllowGrouping = False |
Alle Spalten behalten trotzdem den gleichen Spaltenindex.
1 2 3 4 5 6 7 8 9 10 |
Private Sub ExpandAllGroups() Dim iRow As Long oSGrid.Redraw = False For iRow = 1 To oSGrid.Rows If (oSGrid.RowIsGroup(iRow)) Then oSGrid.RowGroupingState(iRow) = ecgExpanded End If Next iRow oSGrid.Redraw = True End Sub |
1 2 3 4 5 6 7 8 9 10 |
Private Sub CollapseAllGroups() Dim iRow As Long oSGrid.Redraw = False For iRow = 1 To oSGrid.Rows If (oSGrid.RowIsGroup(iRow)) Then oSGrid.RowGroupingState(iRow) = ecgCollapsed End If Next iRow oSGrid.Redraw = True End Sub |
Workshop zur Benutzung SGrid2.pdf
Für MS-Access ab A00
Ähnliche Artikel
Weiterlesen...