sql >> Database teknologi >  >> RDS >> Access

Microsoft TreeView kontrol selvstudie

A. Introduktion .

Microsoft Tree View Control er en del af Microsoft Windows Common Controls. Det er et interessant stykke objekt, der viser relaterede data i et hierarki af noder. Det kan vise relaterede data, såsom poster og underposter i en indeksliste eller liste over mapper som Windows Stifinders venstre rude eller en liste over relaterede elementer i en hierarkisk struktur med trælinjer, afkrydsningsfelter og grafik af bitmapbilleder .

ListView og ImageList Kontrolelementer er en del af Windows Common Controls, og vi vil bruge dem sammen med TreeView Control i Microsoft Access.

Jeg tror, ​​du gerne vil se nogle eksempler på TreeView Control Demo-billeder, som vi vil arbejde på at bygge i de kommende uger.

B. Eksempel på demobilleder .

Noder i den skjulte tilstand.

  1. Eksempeldemoen TreeView-billede med alle noder i skjult form.

    Noder i den udvidede visning.

  2. Ovenstående TreeView-kontrolnoder i den udvidede visning.

    Med pilespidsbilledeikoner.

  3. TreeView-eksempelvisning med pilehovedbilledikoner vist til venstre for hver nodetekst.

    Noder på rodniveau har mappebilleder andre med pilespids.

  4. Dernæst vises TreeView med sammenkædede data i en underformular. Rodniveau noder har to billeder. Mappe-lukket billede vises i normal tilstand. Når rodniveauknuden modtager et museklik, viser den mappe-åben-billedet og viser børneknuderne i udvidet form.

    Relateret information vises på underformularen baseret på valget af node på rodniveau.

    Et af de valgte Child-Node-elementer viser en anden formular (som normalt holdes skjult) med relaterede oplysninger.

    TreeView og ListView Controls

  5. På det næste formularbillede er der to paneler. De produktkategori-varerelaterede noder er i TreeView Control i venstre panel. Når et af kategorielementerne modtager et klik på TreeView-kontrolelementet, vises relaterede produktelementer med mængde og listepris i separate kolonner i ListView Kontrol, i panelet til højre.

C. Oprettelse af prøvedata til prøvekørsel.

Lad os prøve TreeView Control med nogle eksempeldata vist nedenfor, baseret på de første to billeder vist i begyndelsen af ​​denne side.

Ovenstående eksempeldatatabel har tre felter.

  • ID felt er et autonummereringsfelt med unikke id-numre. AutoNumber-typen er valgt for vores bekvemmelighed. I begge tilfælde skal alle poster i tabellen have en unik id-værdi. Hvis det er numerisk, skal det konverteres til strengtype, før det føjes til TreeView-kontrollen.

  • Det andet felt er Nodebeskrivelse (Desc ). Rækkerne af information i denne kolonne er logisk relaterede.

  • Det tredje Forældre-ID feltet er numerisk type. Men de bør konverteres til String Type, før de bruges på TreeView Control.

Vi skal vide, hvordan beskrivelseskolonnens værdier er relateret til hinanden, baseret på det kan vi etablere relationen ved at indtaste relaterede værdier i PrentID felt.

For eksempel tden logiske indretning af forholdet mellem forfatter til bøger, udgivere af bøger, boghandlere, hvor bøgerne er til salg, eller lignende forhold mellem medlemmer af et stamtræ.

Forholdet mellem produktkategori, produkter, lager, pris og så videre. Alle disse oplysninger vises muligvis ikke under én kolonne i en enkelt tabel. De kan også vises i forskellige kolonner eller i forskellige tabeller.

Forældre-id felt er meget vigtigt, da det bestemmer det hierarkiske arrangement af noder. Hvis ParentID-feltet er tomt, skal denne post gå som en node på rodniveau. Child-Node skal altid have deres forældre-id udfyldt med dens forældreregistrerings-id-værdi.

Rodniveau Node kan have en eller flere underordnede noder, underordnede noder kan have sine egne underordnede noder.

Vi vil indlæse ovenstående data i en TreeView Control og se, hvordan det ser ud. Så udfylder vi PrentId felt med tilhørende ID s for at ændre visningen, sådan som vi ønsker at se den i en logisk rækkefølge.

D. Windows Common Controls Library-fil .

  1. Men først skal du åbne en af ​​dine databaser eller oprette en ny.

  2. Åbn VBA-vinduet (ALT+F11 ), og vælg Referencer... fra Værktøjer Menu.

  3. Se efter filen:Microsoft Windows Common Controls i den viste liste over filer, og sæt et flueben for at vælge det.

    Hvis du ikke kunne finde filen på listen, skal du klikke på Gennemse... Knap og find filen:MSCOMLIB.OCX i Windows-systemmappen, for Windows 7-versionen, se efter filen i SysWOW64 folder. Klik på OK for at lukke biblioteksfilernes listekontrol.

  4. Opret en tabel med følgende struktur:

  5. Gem tabellen med navnet Eksempel .

  6. Fyld tabellen med eksempeldata fra 12 poster som vist på datavisningsbilledet ovenfor.

    E. Oprettelse af TreeView-kontrol på formular

  7. Opret en ny tom formular.

  8. Klik på Activex Controls knappen fra Kontrolelementer Gruppe, find Microsoft TreeView Control vælg det derefter.

  9. Klik på OK for at indsætte en TreeView-kontrol på formularen.

  10. Træk kontrolelementet ned og til højre for at efterlade lidt plads øverst og til venstre for TreeView-kontrolelementet. Træk størrelseshåndtaget i nederste højre hjørne mod højre og nederste hjørne for at gøre kontrollen større, som eksempelbilledet nedenfor.

  11. Vis egenskabsarket for kontrolelementet, og skift dets navn Ejendomsværdi til TreeView0, hvis det er anderledes der.

  12. Vis VBA-redigeringsvinduet for formularen.

  13. F. Få adgang til VBA-kode.

  14. Kopiér og indsæt følgende VBA-kode i modulet og overskriv de eksisterende kodelinjer der:
    Option Compare Database
    Option Explicit
    
    Dim tv As MSComctlLib.TreeView
    Const KeyPrfx As String = "X"
    
    Private Sub Form_Load()
    Dim db As Database
    Dim rst As Recordset
    Dim strSQL As String
    Dim nodKey As String
    Dim ParentKey As String
    Dim strText As String
    
    Set tv = Me.TreeView0.Object
    
    strSQL = "SELECT ID, Desc, ParentID FROM Sample;"
    
    Set db = CurrentDb
    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)
    
    Do While Not rst.EOF And Not rst.BOF
        If Nz(rst!ParentID, "") = "" Then
            nodKey = KeyPrfx & CStr(rst!ID)
            strText = rst!Desc
            ‘Add the TreeView Root Level Nodes
            tv.Nodes.Add , , nodKey, strText
        
        Else
            ParentKey = KeyPrfx & CStr(rst!ParentID)
            nodKey = KeyPrfx & CStr(rst!ID)
            strText = rst!Desc
            ‘Add the Record as Child Node
            tv.Nodes.Add ParentKey, tvwChild, nodKey, strText 
            
        End If
        rst.MoveNext
    Loop
    rst.Close
    
    Set rst = Nothing
    Set db = Nothing
    
    End Sub
    
    
  15. Gem formularen med navnet frmSample, men luk ikke VBA-vinduet.

    G. VBA-kode linje-for-linje.

Lad os tage et hurtigt kig på VBA-koden og forstå, hvad den gør.

I det globale deklarationsområde i formularmodulet er det variable tv erklæret som TreeView Objekt. KeyPrfx erklæret som Konstant , med String Type-værdien "X".

TreeView-knuden Nøgleværdien skal altid være af strengtype og skal have mindst ét ​​ikke-numerisk tegn til stede i nodenøglen. Vores eksempel på tabelnøgleværdier er alle i numerisk form, vi kan konvertere og tilføje dem til den konstante værdi "X ”. Numerisk værdi konverteret til strengtype alene accepteres ikke som node-nøgle.

Bemærk: Hvis Node-Nøglen og Forældrenøgle værdier allerede er i alfa- eller alfanumerisk form, så opstår spørgsmålet om konvertering ikke. Alle node-nøgle-værdier skal være unikke.

I Form_Load() Hændelsesprocedure, Database- og Recordset-objekterne erklæres. Fire strengvariabler er også erklæret.

Udsagnet Set tv =Me.TreeView0.Object sætningen tildeler, TreeView0 Objekt på formularen til objektvariablen tv.

OpenRecordset()-sætningen åbner Sample Tabelposter ved hjælp af SQL strSQL.

Gør mens... sætning sikrer, at postsættet ikke er tomt. Hvis det er tomt, skal du afslutte løkken og afslutte programmet.

Hvis der er poster, er den første posts PrentId feltet kontrolleres for tilstedeværelsen af ​​en eller anden værdi derinde eller ej.

Hvis den er tom, er denne post for TreeView-kontrols rodniveau node vare. Rodniveau-noden behøver kun den unikke Node-Nøgle Værdi, som vi allerede har i ID Felt og vare Beskrivelse Feltværdi for Tekst Argument.

Hvis Forældre-ID feltet har en vis værdi, så er posten en Child-Node (Barn af knude på rodniveau eller underordnet af en underknude på øverste niveau) af TreeView-objektet.

Den næste linje opretter Nøglen Argumentværdi i nodKey Strengvariabel med ID feltværdi, konverteret til streng og tilføjet til det konstante præfiks X, Node-Key bliver X1 .

Den første!Beskrivelse feltværdi tilføjet til strengvariabelen strText, blot for klarhedens skyld og for at gøre det kort i Nodes.Add() metodens parameterliste, hvis feltreferencen er meget lang, vil dette holde Add()-metoden pæn og ryddelig.

Den næste eksekverbare linje:tv.Node.Add() kalder Add()-metoden for TreeView.Nodes Objekt for at tilføje noden til TreeView0 kontrol på formularen frmSample .

Syntaks af Add()-metoden er givet nedenfor til reference:

tv.Nodes.Add([Relative],[Relationship],[Key],[Text],[Image],[SelectedImage]) As Node

Alle seks parametre i Add() metoden er valgfri. Hvis du kalder denne metode uden nogen parametre, så en tom rodniveau node vil blive tilføjet, og en tom trælinje vises som en indikator i TreeView-kontrollen.

Til TreeView Root Niveau Node kræver Nøglen og Tekst Argumentværdier.

For underordnede noder, begge [Relativ] og [Relation] Argumenter er påkrævet. Udeladelse af en af ​​dem vil indsætte noden som en rodnode, men vil ikke generere nogen fejl.

[Slægtning] er NodKey af en eksisterende node, indtastet i den relaterede posts Forældre-ID Mark. [Forhold] er en konstant tvwChild med numerisk værdi 4, der identificerer den som en underordnet node af Nøgle- Værdi i Forældre-ID Felt.

Den anden Konstant værdier for relationsargumentet bruges til at placere underordnede noder på et bestemt sted. Konstante værdier er som følger:

tvwFirst =0, placerer den som den første node på niveauet for den relative node.

tvwLast =1, placerer som den sidste node, på niveauet for den relative node.

tvwNext =2, placerer noden efter en specificeret node.

tvwForrige =3, placerer noden umiddelbart før den specificerede node.

Bemærk: Du kan eksperimentere ved at indstille hver værdi i forholdet Argumenter og kør koden i fejlretningstilstand efter at have holdt VBA-vinduet og formularen i normal visning side om side. Se, hvordan noderne bliver arrangeret i hver cyklus af kodeudførelsen for at forstå.

Disse vil være nyttige, mens du redigerer TreeView-kontrollen ved at slette et element og indsætte et andet element i dets plads eller tilføje en ny node på en bestemt placering.

En node med [Relativ] nøgle skal eksistere i nodesamlingen, før du forsøger at tilføje en underordnet node til den node, ellers genererer Add()-metoden en fejl.

Denne proces gentages, indtil alle poster er behandlet i postsættet.

Bemærk: Du kan gennemgå VBA-koden igen efter demoen er kørt.

H. Den første prøvekørsel.

Åbn formularen i normal visning. Prøvekørselsresultatet vil se ud som billedet nedenfor.

Det ser ikke mere ud end en normal Listbox. Husk, at vi ikke har udfyldt nogen værdi i Forældre-ID felt i vores Eksempel Bord. Vi er nødt til at etablere et forhold mellem elementerne i rækkerne af Record for at flytte og placere dem i en hierarkisk rækkefølge i TreeView Control.

I. Forstå forholdet mellem poster.

  1. Åbn Eksempeltabellen og lad os undersøge optegnelserne og hvordan de er relateret.
  2. Lad os forlade databasen vare alene som en rodgenstand.

    Databaseobjektet har også nogle objekter på øverste niveau:Applikation, DBEngine, Workspaces Collection og Database Collection , som vi har udeladt her.

  3. Så har vi tabellerne gruppeelement med ID værdi 2.
  4. Den næste tabel , Felter, Felt elementer er relateret til tabellerne gruppe. Vi vil have tabellen Felter, og Felt elementer, der skal opstilles under det overordnede element tabeller Gruppepost med ID-værdi 2.
  5. Lad os kalde posten for tabeller som overordnet node , tabel, felter og feltposter som Child-Nodes .

    J. Opdatering af ParentID-feltet.

  6. Så vi skal opdatere værdien 2 (Knude-nøgle til tabeller ) i parentID felt i Tabel , Felter, og Felt optegnelser.
  7. Opdater kun disse poster, og luk tabellen. Når det er gjort, vil posterne se ud som billedet nedenfor:
  8. Åbn nu din frmSample i formularvisning og tjek TreeView-kontrollen. Resultatet vil se ud som det tidligere uden nogen ændring. Ændringerne er allerede sket, men de er ikke synlige for dig.

    K. Egenskabsarket for TreeView Control.

  9. TreeView Control har sit eget egenskabsark, og indstillingerne påvirker dets udseende. Så vi vil foretage en ændring i en af ​​dens egenskaber og vende tilbage for at se TreeView igen.

  10. Vend frmSample i designvisning.
  11. Højreklik på TreeView Control og fremhæv TreeCtrl_Object fra genvejsmenuen, og vælg Egenskaber .

    Ejendomsarket vil se ud som billedet nedenfor:

  12. Indstillinger på dette egenskabsark ændrer udseendet af TreeView Display.

    Den øverste venstre side Ejendom Stil er allerede indstillet med de maksimale tilgængelige funktioner Mulighed-7 (tvwTreeLinesPlusMinusPictureText).

  13. Skift LineStyle Ejendom Værdi =1 (tvwRootLines) og klik på Anvend knappen, og klik derefter på OK for at lukke ejendomsarket.

    L. Kør efter LineStyle Ændring af ejendomsværdi

  14. Gem formularen, og åbn den i normal visning. Nu vises trælinjerne korrekt. Tabellerne Node har et plus (+ ) tegn på venstre side, hvilket indikerer, at denne node har en eller flere underordnede noder i det næste niveau, og de er ikke i udvidet form.
  15. Klik på plus-symbolet for at udvide noden og vise de underordnede noder med det samme forældre-id. Når du klikker på minussymbolet, er børneknuderne foldet sammen og skjulte, hvilket ændrer symbolet til et plustegn igen.
  16. Skærmbilledet vil se ud som følgende billede, når det udvides:


    M. Forældre-id Opdatering af andre poster.

    Vi opdaterer formularerne registrere ID Værdi (Node-Key Value) i Form, Controls, og Kontrol posters Forældre-ID felter, så disse poster vises under Formularer Node som dens Child Nodes .

    Opdater på samme måde feltet ParentID i Rapport og Kontroller poster med Rapporter ID (Node-Key Value) Værdi, så Rapport og Kontroller elementer vil placeres under overordnet node Rapporter , da det er Child Nodes .

  17. Foretag ændringer i dine prøvetabelposter med ParentID-værdierne som vist nedenfor:

    Efter ovenstående ændringer vil TreeView-displayet se ud som det følgende billede, når alle noderne er i udvidet form.

    Alle underordnede noder relateret til knudepunkterne på rodniveau:Tabellerne, formularerne og rapporterne er grupperet som en liste under deres overordnede noder. Men en børneknude kan have en overordnet node, en storforældreknude eller en storforældreknude.

    N. Arrangering af alle objekter i logisk hierarkisk rækkefølge.

    Lad os f.eks. tage den første tabeller af node på rodniveau . Logisk Felt (med post ID 5) er direkte relateret til Felterne samling (record ID 4), Felterne samling relateret til Tabel og Tabel er en del af Tables kollektion. Hvert element i gruppen (rekordnummer 5 til 2) er relateret et trin op til det næste niveau.

    Så lad os placere disse underordnede noder korrekt under deres egen forældreknude og se, hvordan det ser ud.

  18. Åbn din prøvetabel, og skift forældre-id-værdierne for tabellerne relateret til børnejournaler som vist nedenfor:

  19. Feltet med ID-5-postens overordnede er Felter, post med ID-4, derfor har vi opdateret den 5. posts ParentID-felt med ID-nummer 4.
  20. På samme måde opdateres den 4. posts forældre-id-felt med 3, og den tredje posts forældre-id opdateres med postnummer 2.
  21. Bemærk: Antag ikke, at de ting, der er arrangeret på denne måde, skal være ved siden af ​​hinanden.

  22. Gem tabellen efter ændringer af posterne, og åbn frmSample for at se ændringerne. Din TreeView-skærm skal se ud som billedet nedenfor, med alle noder i udvidet form.

Child-Node for en Rodniveau Node kan være en Parent-Node til sit eget barn eller børn. På denne måde kan den gå flere trin ned i træet.

Skift de to andre grupper af Child Nodes Forældre-ID feltværdier til at ligne billedet ovenfor.


ORDBOG OBJECT

  1. Grundlæggende om ordbogsobjekter
  2. Dictionary Object Basics-2
  3. Sortering af ordbogsobjektnøgler og -elementer
  4. Vis poster fra ordbog
  5. Tilføj klasseobjekter som ordbogselementer
  6. Opdater Class Object Dictionary Element

  1. Sådan udfyldes manglende datoer i PostgreSQL ved hjælp af generate_series

  2. 911/112:En nødopkaldstjenestedatamodel

  3. Tidszonelagring i datatype tidsstempel med tidszone

  4. Hvordan kan jeg automatisere opgaven med at generere scripts i SQL Server Management Studio 2008?