Access
 sql >> Baza danych >  >> RDS >> Access

Samouczek sterowania Microsoft TreeView

A. Wprowadzenie .

Microsoft Tree View Control jest częścią wspólnych formantów Microsoft Windows. Jest to interesujący element obiektu, który wyświetla powiązane dane w hierarchii węzłów. Może wyświetlać powiązane dane, takie jak wpisy i podwpisy na liście indeksów lub listę folderów, takich jak lewe okienko Eksploratora Windows lub lista powiązanych elementów w strukturze hierarchicznej z liniami drzewa, polami wyboru i grafiką obrazów bitmapowych .

ListView i Lista obrazów Kontrolki są częścią wspólnych kontrolek Windows i będziemy ich używać wraz z kontrolką TreeView w programie Microsoft Access.

Myślę, że chciałbyś spojrzeć na przykładowe obrazy demonstracyjne TreeView Control, nad którymi będziemy pracować w ciągu najbliższych kilku tygodni.

B. Przykładowe obrazy demonstracyjne .

Węzły w stanie zwiniętym.

  1. Przykładowy obraz demonstracyjny TreeView ze wszystkimi węzłami w formie zwiniętej.

    Węzły w widoku rozszerzonym.

  2. Powyższe węzły kontrolne TreeView w widoku rozszerzonym.

    Z ikonami obrazu grotów strzałek.

  3. Przykładowy wyświetlacz TreeView, z ikonami obrazu w kształcie strzałek wyświetlanymi po lewej stronie każdego tekstu węzła.

    Węzły poziomu głównego mają obrazy folderów inne z grotem strzałki.

  4. Następnie, wyświetlanie TreeView z połączonymi danymi w podformularzu. Węzły poziomu głównego mają dwa obrazy. Obraz zamknięty w folderze jest wyświetlany w trybie normalnym. Gdy węzeł poziomu głównego otrzyma kliknięcie myszą, wyświetla obraz folderu-otwartego i wyświetla węzły podrzędne w rozwiniętej formie.

    Powiązane informacje są wyświetlane w podformularzu w oparciu o wybór węzła głównego.

    Jeden z wybranych elementów węzła podrzędnego wyświetla inny formularz (zwykle ukryty) z powiązanymi informacjami.

    Kontrolki TreeView i ListView

  5. Na następnym obrazie formularza znajdują się dwa panele. Węzły związane z kategorią produktów znajdują się w kontrolce TreeView w lewym panelu. Gdy jeden z elementów kategorii otrzyma kliknięcie na kontrolce TreeView, powiązane elementy produktu z ilością i ceną katalogową w oddzielnych kolumnach pojawią się w ListView Kontrola, w prawym panelu bocznym.

C. Tworzenie przykładowych danych do uruchomienia próbnego.

Wypróbujmy TreeView Control z niektórymi przykładowymi danymi pokazanymi poniżej, opartymi na pierwszych dwóch obrazach pokazanych na początku tej strony.

Powyższa przykładowa tabela danych ma trzy pola.

  • Identyfikator pole to pole Autonumerowanie z unikalnymi numerami identyfikacyjnymi. Typ Autonumerowania został wybrany dla naszej wygody. W obu przypadkach wszystkie rekordy w tabeli powinny mieć wartość unikalnego identyfikatora. Jeśli jest to numeryczny, powinien zostać przekonwertowany na typ ciągu, przed dodaniem go do kontrolki TreeView.

  • Drugie pole to Opis węzła (Opis ). Wiersze informacji w tej kolumnie są logicznie powiązane.

  • Trzeci identyfikator rodzica pole jest typu liczbowego. Ale powinny zostać przekonwertowane na typ ciągu przed użyciem go w kontrolce TreeView.

Musimy wiedzieć, w jaki sposób wartości kolumny opisu są ze sobą powiązane, na podstawie tego możemy ustalić relację, wprowadzając powiązane wartości do ParentID pole.

Na przykład logiczny układ relacji między autorami książek, wydawcami książek, księgarniami, w których książki są w sprzedaży, lub podobnymi relacjami między członkami drzewa genealogicznego.

Związek między kategorią produktu, produktami, zapasami, ceną itd. Wszystkie te informacje mogą nie pojawiać się w jednej kolumnie w jednej tabeli. Mogą pojawiać się w różnych kolumnach lub w różnych tabelach.

Identyfikator rodzica pole jest bardzo ważne, ponieważ określa hierarchiczny układ węzłów. Jeśli pole ParentID jest puste, ten rekord powinien zostać potraktowany jako węzeł na poziomie głównym. Węzeł podrzędny powinien zawsze mieć swój ParentID wypełniony wraz z wartością identyfikatora rekordu rodzica.

Węzeł poziomu głównego może mieć jeden lub więcej węzłów podrzędnych, węzeł podrzędny może mieć własne węzły podrzędne.

Załadujemy powyższe dane do kontrolki TreeView i zobaczymy, jak to wygląda. Następnie wypełnimy Identyfikator rodzica pole z powiązanym identyfikatorem s, aby zmienić widok w sposób, w jaki chcemy go zobaczyć w logicznej kolejności.

D. Plik biblioteki wspólnych elementów sterujących systemu Windows .

  1. Ale najpierw otwórz jedną ze swoich baz danych lub utwórz nową.

  2. Otwórz okno VBA (ALT+F11 ) i wybierz Referencje… z Narzędzi Menu.

  3. Poszukaj pliku:Wspólne elementy sterujące Microsoft Windows na wyświetlonej liście plików i umieść znacznik wyboru, aby go wybrać.

    Jeśli nie możesz znaleźć pliku na liście, kliknij Przeglądaj... Kliknij i znajdź plik:MSCOMLIB.OCX w katalogu systemu Windows, dla wersji Windows 7 poszukaj pliku w SysWOW64 teczka. Kliknij OK aby zamknąć Kontrolkę listy plików biblioteki.

  4. Utwórz tabelę o następującej strukturze:

  5. Zapisz tabelę pod nazwą Próbka .

  6. Wypełnij tabelę przykładowymi danymi 12 rekordów, jak pokazano na powyższym obrazku danych.

    E. Tworzenie kontrolki TreeView w formularzu

  7. Utwórz nowy pusty formularz.

  8. Kliknij Kontrolki Activex przycisk z Sterowania Grupuj, znajdź Kontrolkę Microsoft TreeView następnie wybierz go.

  9. Kliknij OK aby wstawić kontrolkę TreeView w formularzu.

  10. Przeciągnij kontrolkę w dół i w prawo, aby zostawić trochę miejsca u góry i po lewej stronie kontrolki TreeView. Przeciągnij uchwyt zmiany rozmiaru w prawym dolnym rogu w kierunku prawego i dolnego rogu, aby powiększyć kontrolkę, jak na przykładowym obrazie podanym poniżej.

  11. Wyświetl arkusz właściwości kontrolki i zmień jego Nazwę Wartość właściwości do TreeView0, jeśli tam jest inaczej.

  12. Wyświetl okno edycji VBA formularza.

  13. F. Uzyskaj dostęp do kodu VBA.

  14. Skopiuj i wklej następujący kod VBA do modułu, nadpisując tam istniejące wiersze kodu:
    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. Zapisz formularz pod nazwą frmSample, ale nie zamykaj okna VBA.

    G. Kod VBA linia po linii.

Rzućmy okiem na kod VBA i zrozumiemy, co on robi.

W obszarze deklaracji globalnej w module formularzy zmienna telewizor zadeklarowany jako TreeView Obiekt. KeyPrfx zadeklarowana jako stała , z wartością typu ciągu „X”.

Węzeł TreeView 's Key-Value musi być zawsze typu String i wymaga co najmniej jednego znaku nienumerycznego w kluczu węzła. Wszystkie nasze przykładowe kluczowe wartości tabeli są w postaci liczbowej, możemy je przekonwertować i dodać do wartości stałej „X ”. Wartość liczbowa przekonwertowana na sam typ ciągu nie zostanie zaakceptowana jako klucz węzła.

Uwaga: Jeśli Klucz węzła i Klucz rodzica wartości są już w formie alfa lub alfanumerycznej, więc kwestia konwersji nie pojawia się. Wszystkie wartości klucza węzła muszą być unikalne.

W Form_Load() Procedura zdarzenia, deklarowane są obiekty Database i Recordset. Deklarowane są również cztery zmienne łańcuchowe.

Stwierdzenie Ustaw telewizor =Me.TreeView0.Object instrukcja przypisuje TreeView0 Obiekt w formularzu do zmiennej obiektu tv

Instrukcja OpenRecordset() otwiera Próbkę Rekordy tabeli przy użyciu SQL strSQL.

Zrób to… instrukcja zapewnia, że ​​zestaw rekordów nie jest pusty, jeśli jest pusty, wyjdź z Pętli i zakończyć program.

Jeśli istnieją rekordy, to ParentId pierwszego rekordu pole jest sprawdzane pod kątem obecności w nim jakiejś wartości, czy nie.

Jeśli jest pusty, oznacza to, że rekord dotyczy węzła głównego kontrolki TreeView przedmiot. Węzeł na poziomie Root potrzebuje tylko unikalnego klucza węzła Wartość, którą mamy już w ID Pole i przedmiot Opis Wartość pola dla Tekst Argument.

Jeśli Identyfikator rodzica pole ma pewną wartość, to rekord jest węzłem podrzędnym (Podrzędny węzeł na poziomie głównym lub podrzędny węzeł podrzędny wyższego poziomu) obiektu TreeView.

Następna linia tworzy Klucz Wartość argumentu w nodKey Zmienna łańcuchowa z identyfikatorem pole Wartość, przekonwertowane na String i dodane do stałego przedrostka X, Node-Key staje się X1 .

Pierwszy! Opis wartość pola dodana do zmiennej łańcuchowej strText, po prostu dla jasności i skrótu w Nodes.Add() Listing parametrów metody, jeśli odwołanie do pola jest bardzo długie, spowoduje to, że metoda Add() będzie czysta i uporządkowana.

Następna linia wykonywalna:tv.Node.Add() wywołuje metodę Add() TreeView.Nodes Obiekt do dodania węzła do TreeView0 kontrolka w formularzu frmSample .

Składnia metody Add() podano poniżej w celach informacyjnych:

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

Wszystkie sześć parametrów Add() metody są opcjonalne. Jeśli wywołasz tę metodę bez żadnych parametrów, pusty węzeł poziomu głównego zostanie dodana, a pusta linia drzewa pojawi się jako wskaźnik w kontrolce TreeView.

Dla TreeView Korzeń Poziom Węzeł wymaga Klucza i Tekst Wartości argumentów.

W przypadku węzłów podrzędnych oba [Względne] i [Związek] Wymagane są argumenty. Pominięcie któregokolwiek z nich spowoduje wstawienie węzła jako węzła głównego, ale nie wygeneruje żadnego błędu.

[Względny] jest NodKey istniejącego węzła, wpisany do powiązanego rekordu Identyfikatora rodzica pole. [Związek] jest Stałym tvwChild z wartością liczbową 4, identyfikującą go jako węzeł podrzędny Key- Wartość w identyfikatorze rodzica Pole.

Druga stała wartości argumentu relacji są używane do pozycjonowania węzłów podrzędnych w określonej lokalizacji. Wartości stałe są następujące:

tvwFirst =0, umieszcza go jako pierwszy węzeł na poziomie węzła względnego.

tvwOstatnia =1, umieszcza jako ostatni węzeł na poziomie węzła względnego.

tvwNext =2, umieszcza węzeł za określonym węzłem.

tvwPoprzedni =3, umieszcza węzeł bezpośrednio przed określonym węzłem.

Uwaga: Możesz eksperymentować, ustawiając każdą wartość w relacji Argumentuj i uruchom kod w trybie debugowania, po utrzymywaniu okna VBA i formularza w widoku normalnym obok siebie. Zobacz, jak węzły są rozmieszczane w każdym cyklu wykonywania kodu, aby zrozumieć.

Przydadzą się one podczas edycji kontrolki TreeView poprzez usunięcie elementu i wstawienie innego elementu w jego miejsce lub dodanie nowego węzła w określonej lokalizacji.

Węzeł z kluczem [względnym] musi istnieć w kolekcji węzłów przed próbą dodania węzła podrzędnego do tego węzła, w przeciwnym razie metoda Add() wygeneruje błąd.

Ten proces jest powtarzany, dopóki wszystkie rekordy w zestawie nie zostaną przetworzone.

Uwaga: Możesz ponownie przejrzeć kod VBA po uruchomieniu demonstracji.

H. Pierwsze uruchomienie próbne.

Otwórz formularz w widoku normalnym. Wynik uruchomienia próbnego będzie wyglądał jak na obrazku poniżej.

Nie wygląda bardziej niż zwykłe pole listy. Pamiętaj, że nie wprowadziliśmy żadnej wartości w identyfikatorze rodzica pole w naszej Próbce Stół. Musimy ustalić pewną relację między elementami w wierszach rekordu, aby przenieść je i ustawić w hierarchicznej kolejności w kontrolce TreeView.

I. Zrozumienie relacji między rekordami.

  1. Otwórz Tabelę próbek i przyjrzyjmy się zapisom i ich powiązaniom.
  2. Opuśćmy Bazę Danych sam przedmiot jako element główny.

    Obiekt bazy danych zawiera również kilka obiektów najwyższego poziomu:Aplikacja, DBEngine, kolekcja obszarów roboczych i kolekcja baz danych , które tutaj pominęliśmy.

  3. W takim razie mamy Tabele pogrupuj element z identyfikatorem wartość 2.
  4. Następny stół , Pola, Pole elementy są powiązane z Tabelami Grupa. Chcemy tabeli, Pola, i Pole elementy do wyrównania pod nadrzędnym elementem Tabelami Rekord grupy z wartością identyfikatora 2.
  5. Nazwijmy rekord Tabelami jako węzeł nadrzędny , rekordy tabeli, pól i pól jako węzły podrzędne .

    J. Aktualizacja pola ParentID.

  6. Więc musimy zaktualizować wartość 2 (Klucz węzła Tabel ) w parentID pole Tabela , Pola, i Pole dokumentacja.
  7. Proszę zaktualizować tylko te rekordy i zamknąć tabelę. Gdy to zrobisz, rekordy będą wyglądać jak na obrazku podanym poniżej:
  8. Teraz otwórz swój frmSample w widoku formularza i sprawdź kontrolkę TreeView. Wynik będzie wyglądał jak poprzedni bez żadnych zmian. Zmiany już się dokonały, ale nie są one dla Ciebie widoczne.

    K. Arkusz właściwości kontrolki TreeView.

  9. Kontrolka TreeView ma własny arkusz właściwości, a ustawienia wpływają na jego wygląd. Wprowadzimy więc zmianę w jednej z jego właściwości i wrócimy, aby ponownie wyświetlić TreeView.

  10. Obróć frmSample w widoku projektu.
  11. Kliknij prawym przyciskiem myszy kontrolkę TreeView i podświetl TreeCtrl_Object z menu skrótów i wybierz Właściwości .

    Arkusz właściwości będzie wyglądał jak obraz podany poniżej:

  12. Ustawienia w tym arkuszu właściwości zmieniają wygląd wyświetlania TreeView.

    Właściwość Styl po lewej stronie u góry jest już ustawiony z maksymalnymi dostępnymi funkcjami Option-7 (tvwTreeLinesPlusMinusPictureText).

  13. Zmień styl linii Właściwość Wartość =1 (tvwRootLines) i kliknij Zastosuj przycisk, a następnie kliknij OK aby zamknąć arkusz właściwości.

    L. Uruchom po LineStyle Zmiana wartości właściwości

  14. Zapisz formularz i otwórz go w widoku normalnym. Teraz linie drzewa pojawiają się poprawnie. Stoły Węzeł ma plus (+ ) znak po lewej stronie, wskazujący, że ten węzeł ma jeden lub więcej węzłów podrzędnych na następnym poziomie i nie są one rozwinięte.
  15. Kliknij symbol plusa, aby rozwinąć węzeł i wyświetlić węzły podrzędne z tym samym identyfikatorem rodzica. Po kliknięciu symbolu minus węzły podrzędne są zwinięte i ukryte, ponownie zmieniając symbol na znak plus.
  16. Po rozwinięciu wyświetlacz będzie wyglądał jak następujący obraz:


    M. Identyfikator rodzica Aktualizacja innych rekordów.

    Zaktualizujemy Formularze zarejestruj identyfikator Wartość (wartość klucza węzła) w formularzu, kontrolkach i Kontrola Identyfikator rodzica rekordów pola, aby te rekordy były wyświetlane w sekcji Formularze Węzeł jako jego węzły podrzędne .

    Podobnie zaktualizuj pole ParentID w Raport i Sterowanie rekordy z Raportami Identyfikator (Wartość klucza węzła), aby Raport i Sterowanie elementy zostaną umieszczone w węźle nadrzędnym Raporty , ponieważ są to węzły podrzędne .

  17. Wprowadź zmiany w rekordach tabeli próbki z wartościami ParentID, jak pokazano poniżej:

    Po powyższych zmianach wyświetlacz TreeView będzie wyglądał jak następujący obraz, gdy wszystkie węzły będą w rozwiniętej formie.

    Wszystkie węzły podrzędne powiązane z węzłami poziomu głównego:Tabele, formularze i raporty są pogrupowane jako lista pod ich węzłami nadrzędnymi. Ale węzeł podrzędny może mieć węzeł nadrzędny, węzeł nadrzędny lub węzeł nadrzędny nadrzędny.

    N. Rozmieszczanie wszystkich obiektów w logicznym porządku hierarchicznym.

    Weźmy na przykład pierwszy węzeł na poziomie głównym Tabele . Logicznie Pole (z identyfikatorem rekordu 5) jest bezpośrednio powiązany z Polami kolekcja (identyfikator rekordu 4), Pola kolekcja związana z Tabelą i Tabela jest częścią Tabel kolekcja. Każdy element w grupie (rekord od 5 do 2) jest powiązany o jeden stopień do następnego poziomu.

    Więc ustawmy te węzły podrzędne poprawnie pod ich własnym węzłem nadrzędnym i zobaczmy, jak to wygląda.

  18. Otwórz przykładową tabelę i zmień wartości ParentID w Tabelach związane z aktami dziecka, jak pokazano poniżej:

  19. Pole z Rodzicem rekordu ID-5 jest Fields, rekord z ID-4, dlatego zaktualizowaliśmy pole ParentID piątego rekordu o numer ID 4.
  20. Podobnie, pole ParentID czwartego rekordu zostało zaktualizowane o 3, a pole ParentID trzeciego rekordu zostało zaktualizowane o numer 2.
  21. Uwaga: Nie zakładaj, że elementy ułożone w ten sposób muszą znajdować się obok siebie.

  22. Po wprowadzeniu zmian w rekordach zapisz tabelę i otwórz frmSample, aby wyświetlić zmiany. Twój wyświetlacz TreeView powinien wyglądać jak obrazek podany poniżej, ze wszystkimi węzłami w rozwiniętej formie.

Węzeł podrzędny węzła na poziomie głównym może być węzłem nadrzędnym dla własnego węzła podrzędnego lub podrzędnego. W ten sposób może zejść kilka stopni w dół drzewa.

Zmień pozostałe dwie grupy Identyfikatora rodzica węzła podrzędnego wartości pól, aby wyglądały jak na obrazku podanym powyżej.


OBIEKT SŁOWNIKA

  1. Podstawy obiektów słownikowych
  2. Podstawy obiektów słownika-2
  3. Sortowanie kluczy obiektów i elementów słownika
  4. Wyświetl rekordy ze słownika
  5. Dodaj obiekty klasy jako elementy słownika
  6. Aktualizuj element słownika obiektów klas

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć zduplikowane rekordy w programie Access

  2. Zestaw rekordów MS-Access i moduł klas

  3. Jak indeksy wpływają na wydajność bazy danych?

  4. Jak wykonać korespondencję seryjną w programie Access 2016

  5. Aplikacja internetowa Microsoft Access a baza danych na komputery stacjonarne