Problemstellung:
Nur für 32Bit Office Versionen
Das Listenfeld in MS-Access ist ja schon eine prima Sache.
Es hat aber ein fehlende Funktionalitäten.
Leider ist es nicht möglich Zeilen einfärben oder einzelne Einträge in Fett darzustellen.
Dies ist aber mit dem Listview-Control möglich.
Das Control ist etwas komplizierte zu bedienen aber wenn man mal dahinter gestiegen ist
geht das Problemlos.
Voraussetzungen:
Das Bsp ist ab A00 lauffähig.
MSCOMCTL.OCX muss im System32 Verzeichnis vorhanden sein.
Funktionsweise:
Auf die Grundeinstellungen des Listviews gehe jetzt nicht weiter ein.
Diese Einstellungen kann sich jeder in der Bsp-DB ansehen.
Beim Start der DB wird das Listview erstmal ganz normal mit Daten gefüllt.
Das Listview benötigt eine Indexspalte.
Jetzt könnte man sagen, na ist doch toll, ich habe ja ein Autowertfeld in meiner Tabelle.
Falsch gedacht, das Indexfeld darf nicht mit Zahlen beginnen.
Deshalb diese Zeile:
Diese Einstellungen kann sich jeder in der Bsp-DB ansehen.
Beim Start der DB wird das Listview erstmal ganz normal mit Daten gefüllt.
Private Sub Fill_ListView() Dim db As DAO.Database Dim rst As DAO.Recordset Dim objListView As ListView Dim objListItem As ListItem Set db = CurrentDb Set rst = db.OpenRecordset("tbl_Produkte", dbOpenSnapshot) Set objListView = Me!ListView1.Object Me.ListView1.ListItems.Clear Me.ListView1.Refresh Do While Not rst.EOF Set objListItem = objListView.ListItems.Add(, "a" & rst!P_ID, rst!Produkt) With objListItem .ListSubItems.Add , , rst!Produkt .ListSubItems.Add , , Format(rst!Preis, "Currency") End With rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub
Eine Besonderheit ist zubeachten.
Das Listview benötigt eine Indexspalte.
Jetzt könnte man sagen, na ist doch toll, ich habe ja ein Autowertfeld in meiner Tabelle.
Falsch gedacht, das Indexfeld darf nicht mit Zahlen beginnen.
Deshalb diese Zeile:
Set objListItem = objListView.ListItems.Add(, "a" & rst!P_ID, rst!Produkt)
Hier wird dem Autowert ein "a" vorangesetzt.
Jetzt sieht das Listenfeld auch nicht viel anders aus wie ein Listenfeld.
Nun ist es an der Zeit etwas Farbe ins Spiel zubringen.
Damit das Demo etwas variabler ist habe ich mal einen Farbauswahldialog integriert in dem die Farben
frei definiert werden können.
frei definiert werden können.
Mittels der Optionsfelder können nun verschiedene Möglichkeiten aufgerufen werden.
Wobei die Kriterien hier im Bsp. fest sind, aber es ist auch nur ein Demo.
1. Einfärben der Spalte "Produkt"
2. Einfärben der Spalte "Preis"
3. Einfärben der Spalte "Produkt" und Darstellung Fett bei Preis >50
4. Einfärben der Spalte "Preis" und Darstellung Fett bei Preis >50
Zum Füllen des Listviews sieht dann der Code so aus:
Private Sub Fill_ListViewParam(nColumn As Long, Optional nColor1 As Long = 0, _ Optional nColor2 As Long = 0, Optional nColor3 As Long = 0, _ Optional bBold As Boolean = False) Dim db As DAO.Database Dim rst As DAO.Recordset Dim objListView As ListView Dim objListItem As ListItem Dim curPrice As Currency Set db = CurrentDb Set rst = db.OpenRecordset("tbl_Produkte", dbOpenSnapshot) Set objListView = Me!ListView1.Object Me.ListView1.ListItems.Clear Me.ListView1.Refresh Do While Not rst.EOF Set objListItem = objListView.ListItems.Add(, "a" & rst!P_ID, rst!Produkt) With objListItem .ListSubItems.Add , , rst!Produkt .ListSubItems.Add , , Format(rst!Preis, "Currency") curPrice = rst!Preis If curPrice >= 0 And curPrice <= 20 Then .ListSubItems(nColumn).ForeColor = nColor1 ElseIf curPrice > 20 And curPrice <= 50 Then .ListSubItems(nColumn).ForeColor = nColor2 Else .ListSubItems(nColumn).ForeColor = nColor3 .ListSubItems(nColumn).Bold = bBold End If End With rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub
Dateien:
Demo zur Benutzung des Listviews
ab A00
ab A00
Die Zip-Datei enthält ein Version ab A00
Ähnliche Artikel
Weiterlesen...