sql >> Databasteknik >  >> RDS >> Access

Handledning för Microsoft TreeView-kontroll

A. Inledning .

Microsoft Tree View Control är en del av Microsoft Windows Common Controls. Det är ett intressant objekt som visar relaterad data i en hierarki av noder. Den kan visa relaterade data, som poster och underposter i en indexlista eller lista över mappar som Windows Explorers vänstra fönster eller en lista med relaterade objekt i en hierarkisk struktur med trädlinjer, kryssrutor och grafik av bitmappsbilder .

ListView och ImageList Kontroller är en del av Windows Common Controls och vi kommer att använda dem tillsammans med TreeView Control i Microsoft Access.

Jag tror att du skulle vilja titta på några exempel på TreeView Control Demo Images, som vi kommer att arbeta med att bygga under de kommande veckorna.

B. Exempel på demobilder .

Noder i komprimerat tillstånd.

  1. TreeView-exemplet med alla noder i komprimerad form.

    Noder i den utökade vyn.

  2. Ovanstående TreeView-kontrollnoder i den utökade vyn.

    Med pilspetsbildikoner.

  3. TreeView-exempelvisning, med bildikoner med pilhuvuden som visas till vänster om varje nodtext.

    Noder på rotnivå har mappbilder andra med pilspets.

  4. Därefter visas TreeView med länkade data i ett underformulär. Rotnivånoder har två bilder. Mapp stängd bild visas i normalt läge. När rotnivånoden tar emot ett musklick visar den mappöppningsbilden och visar barnnoderna i utökad form.

    Relaterad information visas på underformuläret baserat på valet av rotnivånod.

    Ett av de markerade Child-Node-objekten visar ett annat formulär (som normalt hålls dold) med relaterad information.

    TreeView- och ListView-kontroller

  5. På nästa formulärbild finns det två paneler. Produktkategorin Artikelrelaterade noder finns i TreeView Control, i den vänstra panelen. När en av kategoriartiklarna får ett klick på TreeView-kontrollen, visas relaterade produktartiklar med kvantitet och listpris i separata kolumner i ListView Kontroll, i panelen till höger.

C. Skapa exempeldata för provkörning.

Låt oss prova TreeView-kontrollen med några exempeldata som visas nedan, baserat på de två första bilderna som visas i början av den här sidan.

Ovanstående exempeldatatabell har tre fält.

  • ID fältet är ett AutoNumber-fält med unika ID-nummer. Typen AutoNumber är vald för vår bekvämlighet. I båda fallen bör alla poster i tabellen ha ett unikt ID-värde. Om det är numeriskt bör det konverteras till strängtyp innan det läggs till i TreeView-kontrollen.

  • Det andra fältet är Nodbeskrivning (Desc ). Informationsraderna i denna kolumn är logiskt relaterade.

  • Det tredje förälder-ID fältet är numerisk typ. Men de bör konverteras till String Type innan de används på TreeView Control.

Vi måste veta hur beskrivningskolumnens värden är relaterade till varandra, baserat på det kan vi upprätta relationen genom att ange relaterade värden i ParentID fältet.

Till exempel tdet logiska arrangemanget av relationen mellan författare av böcker, utgivare av böcker, bokhandlar där böckerna är till försäljning, eller liknande relation mellan medlemmar av ett släktträd.

Förhållande mellan produktkategori, produkter, lager, pris och så vidare. All denna information kanske inte visas under en kolumn i en enda tabell. De kan också visas i olika kolumner eller i olika tabeller.

Föräldra-ID fältet är mycket viktigt eftersom det bestämmer det hierarkiska arrangemanget av noder. Om ParentID-fältet är tomt bör den posten gå som en rotnivånod. Child-Noden ska alltid ha sitt föräldra-ID ifyllt med dess överordnade register-ID-värde.

Rotnivånod kan ha en eller flera undernod(ar), undernod kan ha sina egna undernoder.

Vi kommer att ladda ovanstående data i en TreeView-kontroll och se hur det ser ut. Sedan fyller vi i ParentId fält med relaterat ID s för att ändra vyn, hur vi vill se den i en logisk ordning.

D. Windows Common Controls Library-fil .

  1. Men först, öppna en av dina databaser eller skapa en ny.

  2. Öppna VBA-fönstret (ALT+F11 ) och välj Referenser... från Verktyg Meny.

  3. Leta efter filen:Microsoft Windows Common Controls i den visade listan med filer och markera den.

    Om du inte kunde hitta filen i listan klickar du på Bläddra... Knappen och hitta filen:MSCOMLIB.OCX i Windows systemkatalogen, för Windows 7 version leta efter filen i SysWOW64 mapp. Klicka på OK för att stänga biblioteksfillistan.

  4. Skapa en tabell med följande struktur:

  5. Spara tabellen med namnet Sample .

  6. Fyll tabellen med exempeldata från 12 poster som visas på datavyn Bilden ovan.

    E. Skapa TreeView-kontroll på formulär

  7. Skapa ett nytt tomt formulär.

  8. Klicka på Activex-kontroller från Kontroller Grupp, hitta Microsoft TreeView Control välj det sedan.

  9. Klicka på OK för att infoga en TreeView-kontroll i formuläret.

  10. Dra kontrollen nedåt och åt höger för att lämna lite utrymme längst upp och till vänster om TreeView-kontrollen. Dra storlekshandtaget i det nedre högra hörnet mot det högra och nedre hörnet för att göra kontrollen större, som exempelbilden nedan.

  11. Visa egenskapsbladet för kontrollen och ändra dess namn Fastighetsvärde till TreeView0, om det är annorlunda där.

  12. Visa VBA-redigeringsfönstret för formuläret.

  13. F. Få åtkomst till VBA-kod.

  14. Kopiera och klistra in följande VBA-kod i modulen och skriv över de befintliga kodraderna där:
    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. Spara formuläret med namnet frmSample, men stäng inte VBA-fönstret.

    G. VBA-kod rad för rad.

Låt oss ta en snabb titt på VBA-koden och förstå vad den gör.

I det globala deklarationsområdet, i formulärmodulen, är variabeln tv deklareras som TreeView Objekt. KeyPrfx deklareras som Konstant , med String Type-värdet "X".

TreeView noden Nyckel-värde måste alltid vara av strängtyp och behöver minst ett icke-numeriskt tecken som finns i nodnyckeln. Våra exempel på tabellnyckelvärden är alla i numerisk form, vi kan konvertera och lägga till dem till det konstanta värdet "X ”. Numeriskt värde omvandlat till enbart strängtyp accepteras inte som nodnyckel.

Obs! Om Nod-Key och Föräldranyckel värden redan finns i alfa- eller alfanumerisk form, då uppstår inte frågan om konvertering. Alla nodnyckelvärden måste vara unika.

I Form_Load() Händelseprocedur, Databas- och Recordset-objekten deklareras. Fyra strängvariabler deklareras också.

Påståendet Set tv =Me.TreeView0.Object satsen tilldelar, TreeView0 Objekt på formuläret, till objektvariabeln tv.

OpenRecordset()-satsen öppnar Samplet Tabellposter med SQL strSQL.

Gör medan... -satsen säkerställer att postuppsättningen inte är tom. Om den är tom, avsluta loopen och avsluta programmet.

Om det finns poster är den första postens PrentId fältet kontrolleras om det finns något värde där eller inte.

Om den är tom är den posten för TreeView-kontrollens rotnivånod Artikel. Rotnivånoden behöver bara den unika nodnyckeln Värde, som vi redan har i ID Fält och objekt Beskrivning Fältvärde för Text Argument.

Om förälder-ID fältet har något värde så är posten en Child-Node (Barn till rotnod eller barn till någon undernod på övre nivå) av TreeView-objektet.

Nästa rad skapar nyckeln Argumentvärde i nodKey Strängvariabel, med ID fältvärde, konverterat till sträng och lagt till det konstanta prefixet X, Node-Key blir X1 .

Den första!Desc fältvärdet läggs till strängvariabeln strText, helt enkelt för tydlighetens skull och för att göra det kort i Nodes.Add() metods parameterlista, om fältreferensen är mycket lång kommer detta att hålla Add()-metoden snygg och snygg.

Nästa körbara rad:tv.Node.Add() anropar Add()-metoden för TreeView.Nodes Objekt för att lägga till noden till TreeView0 kontroll på formuläret frmSample .

Syntax av Add()-metoden ges nedan som referens:

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

Alla sex parametrar för Add() metoden är valfri. Om du anropar den här metoden utan några parametrar så blir en tom nod på rotnivå kommer att läggas till och en tom trädlinje visas som en indikator i TreeView-kontrollen.

För TreeView Root Nivå Nod kräver nyckeln och Text Argumentvärden.

För barnnoderna, båda [Släkt] och [Relation] Argument krävs. Om du utelämnar någon av dem infogas noden som en rotnod, men kommer inte att generera något fel.

[Släkting] är NodKey för en befintlig nod, in i den relaterade postens förälder-ID fält. [Relation] är ett konstant tvwChild med numeriskt värde 4, vilket identifierar den som en underordnad nod av nyckel- Värde i ParentID Fält.

Den andra Konstant värden för relationsargumentet används för att placera underordnade noder på en specifik plats. Konstanta värden är följande:

tvwFirst =0, placerar den som den första noden, på nivån för den relativa noden.

tvwLast =1, platser som den sista noden, på nivån för den relativa noden.

tvwNext =2, placerar noden efter en specificerad nod.

tvwPrevious =3, placerar noden omedelbart före den angivna noden.

Obs! Du kan experimentera genom att ställa in varje värde i relationen Argumentera och kör koden i felsökningsläge, efter att ha hållit VBA-fönstret och formuläret i normalvy sida vid sida. Se hur noderna ordnas i varje cykel av kodexekveringen för att förstå.

Dessa kommer att vara användbara när du redigerar TreeView-kontrollen genom att ta bort ett objekt och infoga ett annat objekt i dess ställe eller lägga till en ny nod på en specifik plats.

En nod med [Relativ] nyckel måste finnas i nodsamlingen innan du försöker lägga till en underordnad nod till den noden, annars genererar Add()-metoden ett fel.

Denna process upprepas tills alla poster har bearbetats i postuppsättningen.

Obs! Du kan granska VBA-koden igen efter att demon har körts.

H. Den första provkörningen.

Öppna formuläret i normalvy. Provkörningsresultatet kommer att se ut som bilden nedan.

Det ser inte ut mer än en vanlig Listbox. Kom ihåg att vi inte har fyllt i något värde i förälder-ID i vårt exempel Tabell. Vi måste upprätta en viss relation mellan objekten i postens rader för att flytta och placera dem i hierarkisk ordning i TreeView-kontrollen.

I. Förstå relationen mellan poster.

  1. Öppna Exempeltabellen och låt oss undersöka posterna och hur de är relaterade.
  2. Låt oss lämna databasen objekt enbart som ett rotobjekt.

    Databasobjektet har också några överordnade objekt:Application, DBEngine, Workspaces Collection och Databases Collection , som vi har utelämnat här.

  3. Då har vi tabellerna gruppobjekt med ID värde 2.
  4. Nästa tabell , Fält, Fält objekt är relaterade till tabellerna grupp. Vi vill ha tabellen Fält, och Fält objekt som ska radas upp under den överordnade artikeln tabeller Grupppost med ID-värde 2.
  5. Låt oss kalla posten tabeller som överordnad nod , Tabell, Fält och Fältposter som Child-Nodes .

    J. Uppdatering av ParentID-fältet.

  6. Så vi måste uppdatera värdet 2 (Nodnyckel för tabeller ) i parentID fältet Tabell , Fält, och Fält uppgifter.
  7. Uppdatera endast dessa poster och stäng tabellen. När det är klart kommer posterna att se ut som bilden nedan:
  8. Öppna nu ditt frmSample i formulärvyn och kontrollera TreeView-kontrollen. Resultatet kommer att se ut som det tidigare utan någon förändring. Ändringarna har redan skett men de är inte synliga för dig.

    K. Egenskapsbladet för TreeView Control.

  9. TreeView-kontrollen har sitt eget egenskapsblad och inställningarna påverkar dess utseende. Så vi kommer att göra en ändring i en av dess egenskaper och komma tillbaka för att se TreeView igen.

  10. Vänd frmSample i designvyn.
  11. Högerklicka på TreeView-kontrollen och markera TreeCtrl_Object från genvägsmenyn och välj Egenskaper .

    Fastighetsbladet kommer att se ut som bilden nedan:

  12. Inställningar på det här egenskapsbladet ändrar utseendet på TreeView-visningen.

    Den övre vänstra sidan Egendom Stil är redan inställd med maximalt tillgängliga funktioner Alternativ-7 (tvwTreeLinesPlusMinusPictureText).

  13. Ändra LineStyle Egendom Värde =1 (tvwRootLines) och klicka på Använd knappen och klicka sedan på OK för att stänga fastighetsbladet.

    L. Kör efter LineStyle Ändring av fastighetsvärde

  14. Spara formuläret och öppna det i normalvy. Nu visas trädlinjerna korrekt. Tabellerna Noden har ett plus (+ ) tecken på vänster sida, vilket anger att denna nod har en eller flera underordnade noder på nästa nivå och att de inte är i utökad form.
  15. Klicka på plussymbolen för att expandera noden och visa barnnoderna med samma föräldra-ID. När du klickar på minussymbolen är barnnoderna kollapsade och dolda, vilket ändrar symbolen till ett plustecken igen.
  16. Skärmen kommer att se ut som följande bild när den expanderas:


    M. Föräldra-ID Uppdatering av andra poster.

    Vi kommer att uppdatera formulären posta ID Värde (Nod-Key Value) till Form, Controls, och Kontroll posters förälder-ID fält så att dessa poster kommer att listas under Formulär Nod som dess barnnoder .

    Uppdatera på samma sätt fältet ParentID i Rapport och kontroller poster med Rapporter ID (Node-Key Value) Värde så att Rapport och kontroller objekt kommer att placeras under Rapporter för överordnad nod , eftersom det är Barnnoder .

  17. Gör ändringar i dina exempeltabellposter med ParentID-värdena enligt nedan:

    Efter ändringarna ovan kommer TreeView-skärmen att se ut som följande bild, när alla noder är i expanderad form.

    Alla underordnade noder relaterade till rotnivånoderna:Tabellerna, formulären och rapporterna grupperas som en lista under sina överordnade noder. Men en barnnod kan ha en föräldernod, en storföräldernod eller en storfarsnod.

    N. Ordna alla objekt i logisk hierarkisk ordning.

    Låt oss till exempel ta de första tabellerna för noden på rotnivå . Logiskt Fält (med post-ID 5) är direkt relaterad till fälten samling (post-ID 4), Fälten samling relaterad till Tabell och Tabell är en del av Tables samling. Varje objekt i gruppen (postnummer 5 till 2) är relaterat ett steg upp till nästa nivå.

    Så låt oss placera dessa barnnoder korrekt under deras egen föräldranod och se hur det ser ut.

  18. Öppna din provtabell och ändra föräldra-ID-värdena för tabellerna relaterat till barnregister enligt nedan:

  19. Fältet med ID-5-postens överordnade är Fält, post med ID-4, därför har vi uppdaterat den 5:e postens ParentID-fält med ID-nummer 4.
  20. På liknande sätt uppdateras den fjärde postens föräldra-ID-fält med 3, och den tredje postens föräldra-ID uppdateras med post nummer 2.
  21. Obs! Anta inte att föremålen som är arrangerade på detta sätt måste ligga bredvid varandra.

  22. Efter ändringar i posterna sparar du tabellen och öppnar frmSample för att se ändringarna. Din TreeView-skärm bör se ut som bilden nedan, med alla noder i utökad form.

Barnnoden för en rotnivånod kan vara en föräldernod till sitt eget barn eller sina egna barn. På så sätt kan den gå flera steg ner i trädet.

Ändra de andra två grupperna av Child Nodes Föräldra-ID fältvärden för att se ut som bilden ovan.


ORDBOKSOBJEKT

  1. Grundläggande ordbokobjekt
  2. Dictionary Object Basics-2
  3. Sortera ordboksobjektnycklar och objekt
  4. Visa poster från ordbok
  5. Lägg till klassobjekt som ordboksobjekt
  6. Uppdatera Class Object Dictionary Item

  1. Får datumlista inom ett intervall i PostgreSQL

  2. PL/SQL ORA-01422:exakt hämtning returnerar fler än begärt antal rader

  3. Vad är det korrekta indexet för att fråga strukturer i arrayer i Postgres jsonb?

  4. java.sql.SQLEundantag:- ORA-01000:maximala öppna markörer har överskridits