sql >> Database >  >> RDS >> Access

Zelfstudie Microsoft TreeView Control

A. Inleiding .

Microsoft Tree View Control maakt deel uit van Microsoft Windows Common Controls. Het is een interessant stuk Object dat gerelateerde gegevens weergeeft in een hiërarchie van Nodes. Het kan gerelateerde gegevens weergeven, zoals items en subitems in een indexlijst of een lijst met mappen zoals het linkerdeelvenster van Windows Verkenner of een lijst met gerelateerde items in een hiërarchische structuur met boomlijnen, selectievakjes en afbeeldingen van bitmapafbeeldingen .

De Lijstweergave en ImageList Besturingselementen maken deel uit van Windows Common Controls en we zullen ze samen met het TreeView-besturingselement in Microsoft Access gebruiken.

Ik denk dat u enkele voorbeelden van demo-afbeeldingen van TreeView Control wilt bekijken, waar we de komende weken aan zullen werken.

B. Voorbeeld demo-afbeeldingen .

Knooppunten in de samengevouwen staat.

  1. De voorbeelddemo TreeView-afbeelding met alle knooppunten in samengevouwen vorm.

    Knooppunten in de uitgebreide weergave.

  2. De bovenstaande TreeView-besturingsknooppunten in de uitgevouwen weergave.

    Met pijlpuntafbeeldingspictogrammen.

  3. TreeView-voorbeeldweergave, met afbeeldingspictogrammen met pijlpunten links van elke knooppunttekst.

    Knooppunten op rootniveau hebben mapafbeeldingen, andere met pijlpunt.

  4. Vervolgens de TreeView-weergave met gekoppelde gegevens in een subformulier. Knooppunten op rootniveau hebben twee afbeeldingen. Folder-Closed Image wordt weergegeven in de normale modus. Wanneer de Root Level Node een muisklik ontvangt, wordt de afbeelding met geopende map weergegeven en worden de onderliggende nodes in uitgevouwen vorm weergegeven.

    Gerelateerde informatie wordt weergegeven op het subformulier op basis van de selectie van het knooppunt op rootniveau.

    Een van de geselecteerde Child-Node-items toont een ander formulier (normaal verborgen gehouden) met gerelateerde informatie.

    Besturingselementen TreeView en ListView

  5. Op de volgende formulierafbeelding zijn er twee panelen. De productcategorie-itemgerelateerde knooppunten bevinden zich in TreeView-besturingselement in het linkerdeelvenster. Wanneer een van de categorie-items een klik op het TreeView-besturingselement ontvangt, verschijnen gerelateerde productitems met hoeveelheid en catalogusprijs in afzonderlijke kolommen in ListView Controle, in het rechterpaneel.

C. Voorbeeldgegevens maken voor proefrun.

Laten we het TreeView-besturingselement uitproberen met enkele voorbeeldgegevens die hieronder worden weergegeven, gebaseerd op de eerste twee afbeeldingen aan het begin van deze pagina.

De bovenstaande voorbeeldgegevenstabel heeft drie velden.

  • De ID veld is een AutoNummering-veld met unieke ID-nummers. Het type AutoNummering is voor ons gemak geselecteerd. In beide gevallen moeten alle records in de tabel een unieke ID-waarde hebben. Als het Numeriek is, moet het worden geconverteerd naar String Type, voordat het wordt toegevoegd aan het TreeView-besturingselement.

  • Het tweede veld is Node Description (Desc ). De rijen met informatie op deze kolom zijn logisch gerelateerd.

  • De derde ParentID veld is Numeriek type. Maar ze moeten worden geconverteerd naar String Type voordat ze worden gebruikt in TreeView Control.

We moeten weten hoe de waarden van de Beschrijvingskolom aan elkaar gerelateerd zijn, op basis daarvan kunnen we de relatie vaststellen door gerelateerde waarden in te voeren in de ParentID veld.

Bijvoorbeeld de logische opstelling van de relatie tussen Auteur van Boeken, Uitgevers van de Boeken, de Boekhandels waar de Boeken te koop zijn, of soortgelijke Relaties tussen leden van een Stamboom.

Relatie tussen productcategorie, producten, voorraad, prijs, enzovoort. Al deze informatie verschijnt mogelijk niet onder één kolom in één enkele tabel. Ze kunnen ook in verschillende kolommen of in verschillende tabellen verschijnen.

De Ouder-ID veld is erg belangrijk omdat het de hiërarchische rangschikking van Nodes bepaalt. Als het ParentID-veld leeg is, moet die record als een knooppunt op rootniveau gaan. De Child-Node moet altijd hun ParentID hebben ingevuld met de ID-waarde van de ouderrecords.

Node op rootniveau kan een of meer onderliggende node(s) hebben, onderliggende node kan zijn eigen onderliggende node(s) hebben.

We zullen de bovenstaande gegevens in een TreeView-besturingselement laden en kijken hoe het eruit ziet. Dan vullen we de ParentId veld met gerelateerde ID s om de weergave te veranderen, zoals we het willen zien in een logische volgorde.

D. Windows Common Controls-bibliotheekbestand .

  1. Maar open eerst een van uw databases of maak een nieuwe.

  2. Open het VBA-venster (ALT+F11 ) en selecteer Referenties… van Extra Menu.

  3. Zoek naar het bestand:Microsoft Windows Common Controls in de weergegeven lijst met bestanden en plaats een vinkje om het te selecteren.

    Als u het bestand niet in de lijst kunt vinden, klikt u op Bladeren... Knop en zoek het bestand:MSCOMLIB.OCX in de Windows-systeemdirectory, zoek voor de Windows 7-versie naar het bestand in de SysWOW64 map. Klik op OK om de Library Files-lijstcontrole te sluiten.

  4. Maak een tabel met de volgende structuur:

  5. Sla de tabel op met de naam Voorbeeld .

  6. Vul de tabel met de voorbeeldgegevens van 12 records zoals weergegeven in de bovenstaande afbeelding van de gegevensweergave.

    E. TreeView-besturingselement op formulier maken

  7. Maak een nieuw leeg formulier.

  8. Klik op de Activex-besturingselementen knop van de Bediening Groep, zoek het Microsoft TreeView-besturingselement selecteer het dan.

  9. Klik op OK om een ​​TreeView-besturingselement op het formulier in te voegen.

  10. Sleep het besturingselement naar beneden en naar rechts om wat ruimte vrij te laten aan de boven- en linkerkant van het TreeView-besturingselement. Sleep de formaatgreep rechtsonder naar de rechter- en benedenhoek om het besturingselement groter te maken, zoals de voorbeeldafbeelding hieronder.

  11. Geef het eigenschappenblad van het besturingselement weer en wijzig de Naam Eigenschapswaarde naar TreeView0, als het daar anders is.

  12. Geef het VBA-bewerkingsvenster van het formulier weer.

  13. F. Toegang tot VBA-code.

  14. Kopieer en plak de volgende VBA-code in de module en overschrijf de bestaande coderegels daar:
    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. Sla het formulier op met de naam frmSample, maar sluit het VBA-venster niet.

    G. VBA-code regel voor regel.

Laten we de VBA-code even bekijken en begrijpen wat deze doet.

In het Global Declaration Area, van de Form Module, de variabele tv gedeclareerd als TreeView Voorwerp. De KeyPrfx gedeclareerd als Constant , met String Type-waarde "X".

De TreeView Knooppunt 's Key-Value moet altijd van het String Type zijn en er moet ten minste één niet-numeriek teken in de Node Key aanwezig zijn. Onze voorbeeldtabelsleutelwaarden zijn allemaal in numerieke vorm, we kunnen ze converteren en toevoegen aan de constante waarde "X ”. Numerieke waarde geconverteerd naar String Type alleen wordt niet geaccepteerd als Node-Key.

Opmerking: Als de Node-Key en Oudersleutel waarden al in alfa- of alfanumerieke vorm zijn, dan rijst de kwestie van conversie niet. Alle Node-Key-waarden moeten uniek zijn.

In de Form_Load() Event Procedure, de objecten Database en Recordset worden gedeclareerd. Vier String Variabelen worden ook gedeclareerd.

De verklaring Set tv =Me.TreeView0.Object instructie toewijst, de TreeView0 Object op het formulier, naar de objectvariabele tv.

De instructie OpenRecordset() opent de Sample Tabelrecords met de SQL strSQL.

De Do While… statement zorgt ervoor dat de recordset niet leeg is. Als deze leeg is, verlaat dan de Loop en beëindig het programma.

Als er records zijn, is de ParentId . van de eerste record veld wordt gecontroleerd op de aanwezigheid van een waarde daar of niet.

Als het leeg is, is dat record voor het Knooppunt op rootniveau van TreeView-besturingselement item. De node op rootniveau heeft alleen de unieke Node-Key . nodig Waarde, die we al hebben in de ID Veld en item Beschrijving Veldwaarde voor Tekst Argument.

Als de Ouder-ID veld een waarde heeft, dan is het record een Child-Node (Onderliggend knooppunt op hoofdniveau of onderliggend knooppunt van een onderliggende knooppunt op het hoogste niveau) van het TreeView-object.

De volgende regel maakt de Sleutel Argumentwaarde in de nodKey Tekenreeksvariabele, met de ID veld Waarde, omgezet in String en toegevoegd aan de constante prefix X, Node-Key wordt X1 .

De eerste!Desc veldwaarde toegevoegd aan de tekenreeksvariabele strText, gewoon voor de duidelijkheid en om het kort te maken in de Nodes.Add() parameterlijst van de methode, als de veldverwijzing erg lang is, houdt dit de methode Add() netjes en opgeruimd.

De volgende uitvoerbare regel:tv.Node.Add() roept de methode Add() van TreeView.Nodes . aan Object om de Node toe te voegen aan TreeView0 controle op het formulier frmSample .

De Syntaxis van de methode Add() wordt hieronder ter referentie gegeven:

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

Alle zes de parameters van de Add() methode zijn optioneel. Als je deze methode aanroept zonder parameters, dan is een Leeg Root-level Node wordt toegevoegd en er verschijnt een lege boomlijn als indicator in het TreeView-besturingselement.

Voor TreeView Root Niveau Knooppunt vereist de Sleutel en Tekst Argumentwaarden.

Voor de onderliggende knooppunten, beide [Relative] en [Relatie] Argumenten zijn vereist. Als u een van deze weglaat, wordt de Node ingevoegd als een Root Node, maar wordt er geen fout gegenereerd.

[Relatief] is de NodKey van een bestaand knooppunt, ingevoerd in de ParentID . van het gerelateerde record veld. [Relatie] is een constante tvwChild met numerieke waarde 4, identificerend als een onderliggend knooppunt van Key- Waarde in Ouder-ID Veld.

De andere Constante waarden voor het relatieargument worden gebruikt voor het positioneren van onderliggende knooppunten op een specifieke locatie. Constante waarden zijn als volgt:

tvwFirst =0, plaatst het als het eerste knooppunt, op het niveau van het relatieve knooppunt.

tvwLast =1, plaatst als de laatste knoop, op het niveau van de relatieve knoop.

tvwNext =2, plaatst de Node na een gespecificeerde Node.

tvwVorige =3, plaatst de Node direct voorafgaand aan de gespecificeerde Node.

Opmerking: U kunt experimenteren door elke waarde in de relatie in te stellen Argumenteer en voer de code uit in de foutopsporingsmodus, nadat u het VBA-venster en formulier in de normale weergave naast elkaar hebt gehouden. Bekijk hoe de knooppunten worden gerangschikt in elke cyclus van de code-uitvoering om te begrijpen.

Deze zullen handig zijn tijdens het bewerken van het TreeView-besturingselement door een item te verwijderen en een ander item op zijn plaats in te voegen of een nieuw knooppunt op een specifieke locatie toe te voegen.

Er moet een knooppunt met een [relatieve] sleutel in de knooppuntenverzameling aanwezig zijn voordat u probeert een onderliggend knooppunt aan dat knooppunt toe te voegen, anders genereert de methode Add() een fout.

Dit proces wordt herhaald totdat alle records in de recordset zijn verwerkt.

Opmerking: U kunt de VBA-code opnieuw bekijken nadat de demo is uitgevoerd.

H. De eerste proefrun.

Open het formulier in de normale weergave. Het resultaat van de proefrun ziet eruit als de onderstaande afbeelding.

Het ziet er niet meer uit dan een normale Listbox. Onthoud dat we geen waarde hebben ingevuld in de ParentID veld in ons Voorbeeld Tafel. We moeten een relatie tot stand brengen tussen de items in de rijen van Record om ze in een hiërarchische volgorde in het TreeView-besturingselement te verplaatsen en te positioneren.

I. De relatie tussen records begrijpen.

  1. Open de Voorbeeldtabel en laten we de archieven onderzoeken en hoe ze gerelateerd zijn.
  2. Laten we de database verlaten item alleen als rootitem.

    Het databaseobject heeft ook enkele objecten op het hoogste niveau:Applicatie, DBEngine, Workspaces Collection en Databases Collection , die we hier hebben weggelaten.

  3. Dan hebben we de Tafels groepsitem met ID waarde 2.
  4. De volgende Tabel , Velden, Veld items zijn gerelateerd aan de Tafels groep. We willen de Tabel, Velden, en Veld items die moeten worden uitgelijnd onder het bovenliggende item Tafels Groepsrecord met ID-waarde 2.
  5. Laten we het record Tafels noemen als het Ouderknooppunt , Tabel, Velden en Veldrecords als Child-Nodes .

    J. Het veld ParentID bijwerken.

  6. Dus we moeten de waarde 2 bijwerken (Knooppuntsleutel van Tabellen ) in de parentID veld van Tabel , Velden, en Veld verslagen.
  7. Werk alleen die records bij en sluit de tabel. Als het klaar is, zien de records eruit als de onderstaande afbeelding:
  8. Open nu uw frmSample in Form View en controleer de TreeView Control. Het resultaat zal eruitzien als het vorige zonder enige verandering. De wijzigingen zijn al doorgevoerd, maar zijn niet zichtbaar voor u.

    K. Het eigenschappenblad van TreeView Control.

  9. Het TreeView-besturingselement heeft zijn eigen eigenschappenblad en de instellingen beïnvloeden het uiterlijk. We zullen dus een wijziging aanbrengen in een van de eigenschappen en terugkomen om de TreeView opnieuw te bekijken.

  10. Draai de frmSample in ontwerpweergave.
  11. Klik met de rechtermuisknop op het TreeView-besturingselement en markeer TreeCtrl_Object in het snelmenu en selecteer Eigenschappen .

    Het eigenschappenblad ziet eruit als de onderstaande afbeelding:

  12. Instellingen op dit eigenschappenblad veranderen het uiterlijk van de TreeView-weergave.

    De eigenschap linksboven Stijl is al ingesteld met de maximale beschikbare functies Optie-7 (tvwTreeLinesPlusMinusPictureText).

  13. Verander de Lijnstijl Eigenschap Waarde =1 (tvwRootLines) en klik op de Toepassen knop en klik vervolgens op OK om het eigenschappenblad te sluiten.

    L. Uitvoeren na de LineStyle Wijziging eigendomswaarde

  14. Sla het formulier op en open het in de normale weergave. Nu verschijnen de boomlijnen correct. De Tafels Knooppunt heeft een plus (+ ) teken aan de linkerkant om aan te geven dat dit knooppunt een of meer onderliggende knooppunten heeft in het volgende niveau en dat ze niet in uitgevouwen vorm zijn.
  15. Klik op het plus-symbool om het knooppunt uit te vouwen en de onderliggende knooppunten weer te geven, met hetzelfde ParentID. Wanneer u op het min-symbool klikt, worden de onderliggende knooppunten samengevouwen en verborgen, waardoor het symbool weer in een plusteken verandert.
  16. Het scherm ziet er uit als de volgende afbeelding wanneer deze is uitgevouwen:


    M. Ouder-ID Bijwerken van andere records.

    We updaten de Formulieren record ID Waarde (Node-Key Value) in Form, Controls, en Controle records' Ouder-ID velden zodat deze records worden weergegeven onder de Formulieren Knooppunt als zijn Kinderknooppunten .

    Werk op dezelfde manier het ParentID-veld van Report bij en Besturingselementen records met Rapporten ID (Knooppuntwaarde) Waarde zodat Rapporteren en Besturingselementen items worden gepositioneerd onder de Parent Node Rapporten , want het is Child Nodes .

  17. Breng wijzigingen aan in uw voorbeeldtabelrecords met de ParentID-waarden zoals hieronder weergegeven:

    Na de bovenstaande wijzigingen ziet de TreeView-weergave eruit als de volgende afbeelding, wanneer alle knooppunten in uitgevouwen vorm zijn.

    Alle onderliggende knooppunten die verband houden met de knooppunten op rootniveau:de tabellen, formulieren en rapporten zijn gegroepeerd als een lijst onder hun bovenliggende knooppunten. Maar een onderliggende knoop kan een bovenliggende knoop, een grootouderknoop of een overgrootouderknoop hebben.

    N. Alle objecten in logische hiërarchische volgorde rangschikken.

    Laten we bijvoorbeeld het eerste knooppunt op rootniveau nemen Tabellen . Logisch Veld (met record-ID 5) is direct gerelateerd aan de Velden collectie (record-ID 4), de Velden verzameling gerelateerd aan Tabel en Tabel maakt deel uit van Tafels verzameling. Elk item in de groep (recordnummer 5 tot 2) is een stap naar het volgende niveau gerelateerd.

    Laten we deze onderliggende knooppunten dus correct onder hun eigen bovenliggende knooppunt plaatsen en kijken hoe het eruit ziet.

  18. Open uw voorbeeldtabel en wijzig de ParentID-waarden van de Tabellen gerelateerd aan kinderdossiers zoals hieronder weergegeven:

  19. Het Veld met De ouder van ID-5 record is Fields, record met ID-4, daarom hebben we het ParentID-veld van het 5e record bijgewerkt met ID-nummer 4.
  20. Op dezelfde manier wordt het ParentID-veld van de 4e record bijgewerkt met 3 en wordt de ParentID van de 3e record bijgewerkt met recordnummer 2.
  21. Opmerking: Ga er niet vanuit dat de items die op deze manier zijn gerangschikt, naast elkaar moeten staan.

  22. Sla na wijzigingen in de records de tabel op en open de frmSample om de wijzigingen te bekijken. Uw TreeView-weergave zou eruit moeten zien als de onderstaande afbeelding, met alle knooppunten in uitgevouwen vorm.

Het onderliggende knooppunt van een knooppunt op rootniveau kan een bovenliggend knooppunt zijn voor zijn eigen onderliggende of onderliggende knooppunt. Op deze manier kan het een aantal treden naar beneden gaan.

Wijzig de andere twee groepen ParentID van Child Node veldwaarden om eruit te zien als de afbeelding hierboven.


WOORDENBOEKOBJECT

  1. Basisprincipes van woordenboekobjecten
  2. Basisprincipes van woordenboekobjecten-2
  3. Woordenboekobjectsleutels en -items sorteren
  4. Records uit woordenboek weergeven
  5. Klasobjecten toevoegen als woordenboekitems
  6. Klasobject woordenboekitem bijwerken

  1. Opgeslagen procedure of functie verwacht een parameter die niet is opgegeven

  2. 5 tips om uw database veilig te houden

  3. Hoe stel ik de timer in om elke n minuten een functie aan te roepen?

  4. Kolomrechten retourneren van een gekoppelde server in SQL Server (T-SQL-voorbeelden)