Polnjenje vrstice za krmarjenje iz tabele
Skupine, vnose in strani kontrolnika WklNavBar hranite v tabeli sprednjega dela, tako da je nova stran
nova vrstica in ne sprememba obrazca in njegove kode.
Zahteva WKL Forms Object Library 1.26 ali novejšo različico.
Pregled rešitve
Vezana vrstica svoje skupine in vnose prebere iz RecordSource (tabela, poizvedba ali stavek SQL) in cilj vnosa
prikaže sama, brez kode v Navigate:
- Polja.
KeyFieldje obvezen;TextField,GlyphField,ParentField,SortField,VisibleField,EnabledFieldinPlaceFieldso izbirni. Vrstica, ki jo druga vrstica navaja vParentField, je skupina. - Cilji.
TargetKindFieldinTargetFieldvsakemu vnosu določita cilj: cilj vrste podobrazec postaneSourceObjectkontrolnika podobrazca, navedenega vTargetControl; cilj vrste obrazec ali poročilo se odpre v lastnem oknu. - Začetna stran.
NavigateOnOpen(privzeto True) ob odpiranju obrazca enkrat prikaže cilj vnosa, izbranega v načrtu, brez dogodkov. - Neshranjene spremembe.
ConfirmUnsavedChanges(privzeto True) vpraša, preden cilj vrste podobrazec zamenja stran z neshranjenim zapisom. - Težave. Napačna vrstica nikoli ne ustavi obrazca;
LoadProblemsnavede vsako vrstico, ki je bila preskočena ali prikazana brez napačne vrednosti.
Vse to oblikovalnik nastavi brez kode: vrstica Po meri [...], stran Vir podatkov. Njegov gumb Ustvari
tabelo predloge ustvari tabelo z oblikovanimi vnosi in nanjo veže vrstico.
Izvedba
- Obrazec z vrstico odprite v pogledu načrta in odprite oblikovalnik (vrstica lastnosti Po meri
[...]). - Na strani Vir podatkov izberite Ustvari tabelo predloge (ime tabele
tblNavigation, če ga ne spremenite). Vrstica dobi tabelo s poljiKey,Caption,Glyph,ParentKey,SortOrder,Visible,Enabled,Place,TargetKindinTarget, napolnjeno z oblikovanimi vnosi;VisibleinEnableddobita privzeto vrednost Da. Oblikovana skupina brez vnosov je izpuščena, ker je nobena vrstica ne navaja; stran pove, katera. - V razdelku Cilji v polju Podobrazec za strani (
TargetControl) izberite kontrolnik podobrazca in oblikovalnik zaprite z V redu. V tabeli izpolnite cilje. Primer s skupino „Podatki“, stranjo v podobrazcu, obrazcem v lastnem oknu in vnosom ob spodnjem robu:
Key Caption Glyph ParentKey SortOrder Visible Enabled Place TargetKind Target start Začetek E80F 1 Yes Yes Subform frmStart data Podatki 10 Yes Yes orders Naročila E8A5 data 1 Yes Yes Subform frmNarocila customers Stranke E716 data 2 Yes Yes Form frmStranke options Možnosti E713 1 Yes Yes bottom Form frmMoznosti - Odprite obrazec. Vrstica prikaže vrstice tabele,
sfPagepa prikažefrmStart, če jestartvnos, izbran v načrtu.
Ustvarjanje tabele iz besedila
Aplikacija, zgrajena iz besedila (na primer z orodjem za gradnjo), tabelo namesto z oblikovalnikom ustvari s stavkom. Ta stavek ustvari iste stolpce kot Ustvari tabelo predloge:
CREATE TABLE tblNavigation ( [KEY] TEXT(50) CONSTRAINT pkNavigation PRIMARY KEY, [Caption] TEXT(100), [Glyph] TEXT(10), [ParentKey] TEXT(50), [SortOrder] LONG, [Visible] YESNO, [Enabled] YESNO, [Place] TEXT(10), [TargetKind] TEXT(20), [Target] TEXT(64))
Kaj je obvezno in kaj prosto:
- Imena so obvezna le toliko, kolikor jih navajajo lastnosti polj (
KeyField,TextField…). Pri drugih imenih stolpcev nastavite lastnosti nanje. - Tipi so prosti. Vrstica vsako vrednost prebere prek vira zapisov in jo razloži:
VisibleinEnabledsprejmeta Da/Ne, števila (0 je Ne) ali besede Yes/No, True/False, Ja/Nein, Wahr/Falsch, prazna vrednost pa šteje kot Da.SortOrderštevila razvrsti po vrednosti, besedilo po abecedi, prazne vrednosti na konec.PlacesprejmeTop/Bottom,0/1alioben/unten, prazno pomeni zgoraj.TargetKindsprejme števila od 0 do 3 ali besede, naštete v razdelku Opombe.Glyphsprejme kodo v obsegu od E000 do F8FF, kot štiri šestnajstiške števke, s predpono0x,&HaliU+ali kot sam znak; prazno pomeni brez simbola. Presledki na začetku in koncu so povsod prezrti. - Dolžine določite sami, upoštevajte tri pravila.
Keymora biti enoličen; vrstica ključe primerja ne glede na velike in male črke.ParentKeyvsebuje ključe, zato mora biti vsaj tako dolg kotKey, sicer skupine z dolgim ključem ni mogoče navesti.Targetnavaja obrazec ali poročilo, zato 64 znakov, kolikor je omejitev za imena Accessovih objektov, vedno zadošča.
Enaka vezava s kodo, na primer v obrazcu, ki se zgradi med izvajanjem:
Private Sub Form_Load()
With Me!navMain.Object
.RecordSource = "tblNavigation"
.KeyField = "Key": .TextField = "Caption": .GlyphField = "Glyph"
.ParentField = "ParentKey": .SortField = "SortOrder"
.VisibleField = "Visible": .EnabledField = "Enabled": .PlaceField = "Place"
.TargetKindField = "TargetKind": .TargetField = "Target"
.TargetControl = "sfPage"
If Len(.LoadProblems) > 0 Then Debug.Print .LoadProblems
End With
End Sub
Po spremembi tabele, medtem ko je obrazec odprt, pokličite Requery:
Public Sub RefreshNavigation()
Forms!frmShell!navMain.Object.Requery
End Sub
Opombe
- Mesto velja za vnose. Skupina je vedno zgoraj; njeno mesto med vrsticami na vrhu določa
SortOrder.BottomvPlacevrstice skupine je prezrt,LoadProblemspa vrstico navede. - Vrste ciljev so števila naštevanja
WklNavTargetKindali besedeSubform,Form,Report(tudiUnterformular,Formular,Bericht). Vrstica ime cilja vrste podobrazec nespremenjeno nastavi kotSourceObjectkontrolnika podobrazca, zato delujeta tako ime obrazca kot tabela v oblikiTable.tblOrders. - Dogodki se še vedno sprožijo. Uporabnikova izbira sproži
BeforeNavigate(ki jo lahko prekliče), preden vrstica prikaže cilj, inNavigatepo tem. Vnosi brez cilja vse prepustijo dogodkuNavigate, kot pri nevezani vrstici. - Vrstica sledi svojim ciljem vrste obrazec. Ko obrazec, odprt kot cilj, postane aktivno okno (okno, zavihek dokumenta, Ctrl+F6,
DoCmd.SelectObject), vrstica brez dogodkov izbere njegov vnos. To nadomesti kodo vForm_Activate, ki jo stran Odpiranje obrazcev iz vrstice za krmarjenje potrebuje za nevezano vrstico. - Stolpci Da/Ne v Accessu nikoli niso Null. Vrstica, dodana brez vrednosti v
Visible, ima vrednost Ne in je zato skrita; tabela predloge obema stolpcema da privzeto vrednost Da. - Kaj tabela nadomesti. Vrstice tabele v vrstici za krmarjenje nadomestijo oblikovane vnose;
Itemsobdrži oblikovane vnose, ki se shranijo z obrazcem in prikažejo, kadar vira ni mogoče prebrati. Koda lahko vnose vezane vrstice dodaja, spreminja in odstranjuje do naslednjegaRequery. - Stanje med izvajanjem se ohrani prek
Requery. Izbira, značke in zložene skupine ostanejo za ključe, ki še obstajajo; dogodek se ne sproži. - Shranjena poizvedba lahko kot parametre navaja kontrolnike obrazca; vrstica jih izpolni tako kot Access, ko obrazec odpre poizvedbo. Tako lahko na primer prikažete vnose glede na vlogo uporabnika.
- Samo Accessovi obrazci. Vrstica tabelo bere prek primerka Accessa, v katerem je njen obrazec. Na uporabniškem obrazcu (UserForm) v Excelu ali Wordu tega ni: vrstica prikaže oblikovane vnose,
Requerypa sprožiwkeSourceError(„Vrstica ni v Accessovem obrazcu.“).
Sorodne teme
- Zadržanje uporabnika na strani z neshranjenimi spremembami – preverjanje v lastni kodi, za nevezano vrstico
- Odpiranje obrazcev iz vrstice za krmarjenje – obrazci v lastnih oknih z nevezano vrstico
- Referenčni priročnik API (v angleščini): WklNavBar (
RecordSource,TargetKindField,TargetControl,NavigateOnOpen,ConfirmUnsavedChanges,Requery,LoadProblems)