Prikaz zapisov kot dvovrstičnega seznama
Kratek seznam zapisov prikažite tako kot Outlook in Teams – krepek naslov, siva vrstica s podrobnostmi, barvno stanje in gumb za vsak vnos, brez glav stolpcev –, na primer odprte seje na nadzorni plošči, z gumbom Končaj le tam, kjer je sejo mogoče končati.
Zahteva WKL Forms Object Library 1.36 ali novejšo različico.
Pregled rešitve
- Pogled kontrolnika
WklGrid.ViewModenastavite nawgvListin vnos opišite vItemTemplate; vir zapisov, strežniški način, izbor,LinkMasterFieldssosednjega podobrazca,BeforeDeleteinDeleteSelecteddelujejo enako kot v mreži. Neprekinjeni obrazec tega ne zmore, saj lahko vsebuje le en primerek kontrolnika ActiveX. - Predloga navaja polja:
title(po želji kot povezava), do dve vrsticilinesz Accessovimi oblikami, kapsulostatuss poljem vrste,badge,glyphin do dva gumbacommands, katerih vidnost in omogočenost izhajata iz polj zapisa. - Dogodki:
ItemClickza vnos,LinkClickza povezavo,ItemCommandza gumb. Mreža se sama ne odzove na nobenega od njih.RowSelecttako kot v tabeli sporoči, da je uporabnik izbral drug vnos (s tipkami ali klikom), ne pa, da je koda nastavilaSelectedKey. Tabela vseh dogodkov pogleda seznama je v opombah kViewModev referenčnem priročniku API.
Izvedba
Tabela iz primera, ustvarjena enkrat (proceduro zaženite iz okna Immediate):
Public Sub CreateListSample()
With CurrentDb
.Execute "CREATE TABLE tblSeja (ID LONG CONSTRAINT PK_Seja PRIMARY KEY, Oseba TEXT(50), " & _
"Nacin TEXT(20), Izvor TEXT(30), PoteceOb DATETIME, Stanje TEXT(20), VrstaStanja TEXT(10), LahkoKonca YESNO)"
.Execute "INSERT INTO tblSeja VALUES (1, 'Maja Novak', 'Windows', '10.0.4.21', #2026-10-07 18:02:00#, 'aktivna', 'ok', True)"
.Execute "INSERT INTO tblSeja VALUES (2, 'Luka Horvat', 'Geslo', Null, #2026-10-07 19:30:00#, 'potekla', 'warn', False)"
End With
End Sub
Obrazec frmStart vsebuje kontrolnik WklGrid z imenom grdSeje. Nastavitve navadno določite
enkrat na strani oblikovalnika Seznam (list z lastnostmi, vrstica Po meri [...]); tukaj
so nastavljene s kodo:
Option Compare Database
Option Explicit
Private Sub Form_Load()
With Me!grdSeje.Object
.RecordSource = "tblSeja"
.KeyField = "ID"
.ItemTemplate = "{""title"":{""field"":""Oseba"",""link"":true}," & _
"""lines"":[[{""field"":""Nacin""},{""field"":""Izvor""},{""field"":""PoteceOb"",""format"":""hh:nn""}]]," & _
"""status"":{""field"":""Stanje"",""kindField"":""VrstaStanja""}," & _
"""commands"":[{""key"":""koncaj"",""caption"":""Končaj"",""visibleField"":""LahkoKonca""}]}"
.EmptyText = "Ni odprtih sej."
.AllowDeletions = True
.ViewMode = wgvList
End With
End Sub
Private Sub grdSeje_LinkClick(ByVal Key As Variant, ByVal Field As String)
DoCmd.OpenForm "frmOseba", WhereCondition:="SejaID = " & Key
End Sub
Private Sub grdSeje_ItemCommand(ByVal Key As Variant, ByVal Command As String)
If Command = "koncaj" Then Me!grdSeje.Object.DeleteSelected
End Sub
Private Sub grdSeje_BeforeDelete(ByVal Key As Variant, ByVal Count As Long, Cancel As Integer, Confirm As Boolean)
Confirm = False
Cancel = (MsgBox("Želite končati sejo?", vbYesNo + vbQuestion) = vbNo)
End Sub
Seznam prikaže „Maja Novak“ v polkrepki pisavi, pod tem „Windows · 10.0.4.21 · 18:02“, zeleno
stanje „aktivna“ in gumb Končaj; „Luka Horvat“ nima naslova IP (prazna vrednost in njeno
ločilo sta izpuščena) in nima gumba, ker je LahkoKonca False.
Opombe
- Null v vrstici s podrobnostmi se izpusti skupaj z ločilom; oblike so enake kot pri Accessovih stolpcih in sledijo področnim nastavitvam sistema Windows. Relativni časi („pred 5 min“) niso vgrajeni: izračunajte jih v poizvedbi.
Requeryohrani izbrani zapis (SelectedKey); pokličite ga iz časovnika, če želite osveževati seznam, kot so odprte seje.- Vnos je tako visok kot njegovo besedilo, razen če je nastavljen
ItemHeight; besedilo, ki ne gre v vnos, se konča z „…“ in je v celoti prikazano v opisu orodja. - Tipkovnica: tipka Tab preide iz vnosa na njegove gumbe in naprej na naslednji kontrolnik; bralniki zaslona vsak vnos preberejo kot en stavek, povezavo in gumbe pa kot samostojne elemente.
DeleteSelectedvItemCommandse izvede takoj po koncu procedure, zato zgornjiBeforeDeletedoseže obrazec (VBA ne posreduje dogodka mreže, medtem ko teče katera od njenih dogodkovnih procedur). Koda zaDeleteSelectedvItemCommandzapis še vidi; obvestilo, kot je „Seja je končana“, prikažite zWklToastvAfterDelete.- Seznam ne riše stolpcev. Če želite razvrščati po polju, ki ga vnosi ne prikazujejo, s kodo dodajte skrit stolpec:
Set c = .Columns.Add("St"),c.Visible = False,c.SortDirection = wsdAscending. - Ploščice drugo ob drugi (kartice) niso del pogleda seznama.