Kontrolki powiązania danych
autor: Microsoft
Większość ASP.NET aplikacji opiera się na pewnym stopniu prezentacji danych ze źródła danych zaplecza. Kontrolki powiązane z danymi były kluczową częścią interakcji z danymi w dynamicznych aplikacjach internetowych. ASP.NET 2.0 wprowadza kilka znaczących ulepszeń kontrolek powiązanych z danymi, w tym nową klasę BaseDataBoundControl i składnię deklaratywną.
Większość ASP.NET aplikacji opiera się na pewnym stopniu prezentacji danych ze źródła danych zaplecza. Kontrolki powiązane z danymi były kluczową częścią interakcji z danymi w dynamicznych aplikacjach internetowych. ASP.NET 2.0 wprowadza kilka znaczących ulepszeń kontrolek powiązanych z danymi, w tym nową klasę BaseDataBoundControl i składnię deklaratywną.
BaseDataBoundControl działa jako klasa bazowa dla klasy DataBoundControl i klasy HierarchicalDataBoundControl. W tym module omówimy następujące klasy pochodzące z klasy DataBoundControl:
- Adrotator
- Kontrolki listy
- GridView
- Formview
- Detailsview
Omówimy również następujące klasy pochodzące z klasy HierarchicalDataBoundControl:
- TreeView
- Menu
- Sitemappath
DataBoundControl, klasa
Klasa DataBoundControl jest klasą abstrakcyjną (oznaczoną jako MustInherit w języku VB) używaną do interakcji z danymi tabelarycznymi lub w stylu listy. Poniższe kontrolki to niektóre kontrolki pochodzące z kontrolki DataBoundControl.
Adrotator
Kontrolka AdRotator umożliwia wyświetlanie baneru graficznego na stronie internetowej połączonej z określonym adresem URL. Wyświetlana grafika jest obracana przy użyciu właściwości kontrolki. Częstotliwość wyświetlania określonej reklamy na stronie można skonfigurować przy użyciu właściwości Wrażenia , a reklamy można filtrować przy użyciu filtrowania słów kluczowych.
Kontrolki AdRotator używają pliku XML lub tabeli w bazie danych na potrzeby danych. Następujące atrybuty są używane w plikach XML do konfigurowania kontrolki AdRotator.
Imageurl
Adres URL obrazu do wyświetlenia dla reklamy.
Navigateurl
Adres URL, do którego należy podjąć użytkownika po kliknięciu reklamy. Powinien to być zakodowany adres URL.
Alternatetext
Tekst alternatywny wyświetlany w etykietce narzędzia i odczytywany przez czytniki zawartości ekranu. Ponadto jest wyświetlany, gdy obraz określony przez imageUrl jest niedostępny.
Słowo kluczowe
Definiuje słowo kluczowe, które może być używane podczas filtrowania słów kluczowych. Jeśli zostanie określony, zostaną wyświetlone tylko te reklamy ze słowem kluczowym pasującym do filtru słowa kluczowego.
Wrażenia
Liczba ważona określająca, jak często dana reklama może pojawić się. Jest to związane z wrażeniem innych reklam w tym samym pliku. Maksymalna wartość zbiorczych wyświetleń dla wszystkich reklam w pliku XML wynosi 2 048 000 000 1.
Height
Wysokość reklamy w pikselach.
Width
Szerokość reklamy w pikselach.
Uwaga
Atrybuty Height i Width zastępują wysokość i szerokość samej kontrolki AdRotator.
Typowy plik XML może wyglądać następująco:
<?xml version="1.0" encoding="utf-8" ?> <Advertisements xmlns="http://schemas.microsoft.com/AspNet/AdRotator-Schedule-File"> <Ad> <ImageUrl>~/images/Contoso_ad.gif</ImageUrl> <NavigateUrl>http://www.contoso-ltd.com</NavigateUrl> <AlternateText>Ad for Contoso, Ltd. Web site</AlternateText> <Impressions>100</Impressions> </Ad> <Ad> <ImageUrl>~/images/Aspnet_ad.gif</ImageUrl> <NavigateUrl>http://www.asp.net</NavigateUrl> <AlternateText>Ad for ASP.NET Web site</AlternateText> <Impressions>50</Impressions> </Ad> </Advertisements>
W powyższym przykładzie reklama dla firmy Contoso jest dwa razy bardziej prawdopodobna, jak reklama witryny sieci Web ASP.NET z powodu wartości atrybutu Wrażenia.
Aby wyświetlić reklamy z powyższego pliku XML, dodaj kontrolkę AdRotator do strony i ustaw właściwość AdvertisementFile tak, aby wskazywała plik XML, jak pokazano poniżej:
<asp:AdRotator ID="AdRotator1" runat="server" AdvertisementFile="App_Data/Ads.xml" />
Jeśli zdecydujesz się użyć tabeli bazy danych jako źródła danych dla kontrolki AdRotator, musisz najpierw skonfigurować bazę danych przy użyciu następującego schematu:
Nazwa kolumny | Typ danych | Opis |
---|---|---|
ID (Identyfikator) | int | Klucz podstawowy. Ta kolumna może mieć dowolną nazwę. |
Imageurl | nvarchar(length) | Względny lub bezwzględny adres URL obrazu do wyświetlenia dla reklamy. |
Navigateurl | nvarchar(length) | Docelowy adres URL reklamy. Jeśli nie podasz wartości, reklama nie jest hiperlinkiem. |
Alternatetext | nvarchar(length) | Tekst wyświetlany, jeśli nie można odnaleźć obrazu. W niektórych przeglądarkach tekst jest wyświetlany jako etykietka narzędzia. Tekst alternatywny jest również używany do ułatwień dostępu, dzięki czemu użytkownicy, którzy nie widzą grafiki, mogą usłyszeć jego opis odczytany głośno. |
Słowo kluczowe | nvarchar(length) | Kategoria reklamy, na której można filtrować stronę. |
Wrażenia | int(4) | Liczba wskazująca prawdopodobieństwo, jak często jest wyświetlana reklama. Większa liczba, tym częściej będzie wyświetlana reklama. Suma wszystkich wartości wyświetleń w pliku XML może nie przekraczać 2 048 000 000 –1. |
Width | int(4) | Szerokość obrazu w pikselach. |
Height | int(4) | Wysokość obrazu w pikselach. |
W przypadkach, gdy masz już bazę danych z innym schematem, możesz użyć właściwości AlternateTextField, ImageUrlField i NavigateUrlField, aby zamapować atrybuty adrotatora na istniejącą bazę danych. Aby wyświetlić dane z bazy danych w kontrolce AdRotator, dodaj kontrolkę źródła danych do strony, skonfiguruj parametry połączenia dla kontrolki źródła danych, aby wskazywała bazę danych, i ustaw właściwość DataSourceID kontrolki AdRotator na identyfikator kontrolki źródła danych. Jeśli masz potrzebę programowego konfigurowania reklam AdRotator, użyj zdarzenia AdCreated. Zdarzenie AdCreated przyjmuje dwa parametry; jeden obiekt, a drugie wystąpienie AdCreatedEventArgs. AdCreatedEventArgs jest odwołaniem do tworzonej reklamy.
Poniższy fragment kodu programowo ustawia element ImageUrl, NavigateUrl i AlternateText dla reklamy:
protected void AdRotator1_AdCreated(object sender, System.Web.UI.WebControls.AdCreatedEventArgs e) { e.ImageUrl = "images/contoso_ad.gif"; e.NavigateUrl = "http://www.contoso-ltd.com/"; e.AlternateText = "Ad for Contoso, Ltd Web site"; }
Kontrolki listy
Kontrolki listy obejmują kontrolki ListBox, DropDownList, CheckBoxList, RadioButtonList i BulletedList. Każda z tych kontrolek może być danymi powiązanymi ze źródłem danych. Używają jednego pola w źródle danych jako tekstu wyświetlanego i mogą opcjonalnie użyć drugiego pola jako wartości elementu. Elementy można również dodawać statycznie w czasie projektowania i łączyć elementy statyczne i elementy dynamiczne dodane ze źródła danych.
Aby powiązać kontrolkę listy z danymi, dodaj kontrolkę źródła danych do strony. Określ polecenie SELECT dla kontrolki źródła danych, a następnie ustaw właściwość DataSourceID kontrolki listy na identyfikator kontrolki źródła danych. Użyj właściwości DataTextField i DataValueField , aby zdefiniować tekst wyświetlany i wartość kontrolki. Ponadto można użyć właściwości DataTextFormatString , aby kontrolować wygląd tekstu wyświetlanego w następujący sposób:
Wyrażenie | Opis |
---|---|
Cena: {0:C} | W przypadku danych liczbowych/dziesiętnych. Wyświetla literał "Price:", a następnie liczby w formacie waluty. Format waluty zależy od ustawienia kultury określonego w atrybucie kultury w dyrektywie Page lub w pliku Web.config. |
{0:D4} | W przypadku danych całkowitych. Nie można używać z liczbami dziesiętnymi. Liczby całkowite są wyświetlane w polu zera, które ma cztery znaki szerokości. |
{0:N2}% | W przypadku danych liczbowych. Wyświetla liczbę z dokładnością 2-dziesiętną, po której następuje literał "%". |
{0:000.0} | W przypadku danych liczbowych/dziesiętnych. Liczby są zaokrąglane do jednego miejsca dziesiętnego. Liczby mniejsze niż trzy cyfry są wypełniane zero. |
{0:D} | W przypadku danych daty/godziny. Wyświetla format daty długiej ("czwartek, 06 sierpnia 1996"). Format daty zależy od ustawienia kultury strony lub pliku Web.config. |
{0:d} | W przypadku danych daty/godziny. Wyświetla format daty krótkiej ("12/31/99"). |
{0:yy-MM-dd} | W przypadku danych daty/godziny. Wyświetla datę w formacie liczbowym w dniu miesiąca (96-08-06) |
GridView
Kontrolka GridView umożliwia wyświetlanie i edytowanie danych tabelarycznych przy użyciu metody deklaratywnej i jest następcą kontrolki DataGrid. Poniższe funkcje są dostępne w kontrolce GridView.
- Powiązanie z kontrolkami źródła danych, takimi jak SqlDataSource.
- Wbudowane możliwości sortowania.
- Wbudowane funkcje aktualizowania i usuwania.
- Wbudowane możliwości stronicowania.
- Wbudowane możliwości wyboru wierszy.
- Programowy dostęp do modelu obiektów GridView w celu dynamicznego ustawiania właściwości, obsługi zdarzeń itd.
- Wiele pól klucza.
- Wiele pól danych dla kolumn hiperłączy.
- Dostosowywalny wygląd za pomocą motywów i stylów.
Pola kolumn
Każda kolumna w kontrolce GridView jest reprezentowana przez obiekt DataControlField. Domyślnie właściwość AutoGenerateColumns ma wartość true, która tworzy obiekt AutoGeneratedField dla każdego pola w źródle danych. Każde pole jest następnie renderowane jako kolumna w kontrolce GridView w kolejności wyświetlania każdego pola w źródle danych. Możesz również ręcznie kontrolować, które pola kolumn są wyświetlane w kontrolce GridView , ustawiając właściwość AutoGenerateColumns na wartość false , a następnie definiując własną kolekcję pól kolumn. Różne typy pól kolumn określają zachowanie kolumn w kontrolce.
W poniższej tabeli wymieniono różne typy pól kolumn, których można użyć.
Typ pola kolumny | Opis |
---|---|
Boundfield | Wyświetla wartość pola w źródle danych. Jest to domyślny typ kolumny kontrolki GridView. |
Buttonfield | Wyświetla przycisk polecenia dla każdego elementu w kontrolce GridView. Umożliwia to utworzenie kolumny kontrolek przycisków niestandardowych, takich jak Przycisk Dodaj lub Usuń. |
Checkboxfield | Wyświetla pole wyboru dla każdego elementu w kontrolce GridView. Ten typ pola kolumny jest często używany do wyświetlania pól z wartością logiczną. |
Commandfield | Wyświetla wstępnie zdefiniowane przyciski poleceń do wykonywania operacji wybierania, edytowania lub usuwania. |
Hyperlinkfield | Wyświetla wartość pola w źródle danych jako hiperłącze. Ten typ pola kolumny umożliwia powiązanie drugiego pola z adresem URL hiperłącza. |
Imagefield | Wyświetla obraz dla każdego elementu w kontrolce GridView. |
Templatefield | Wyświetla zawartość zdefiniowaną przez użytkownika dla każdego elementu w kontrolce GridView zgodnie z określonym szablonem. Ten typ pola kolumny umożliwia utworzenie pola kolumny niestandardowej. |
Aby deklaratywnie zdefiniować kolekcję pól kolumn, najpierw dodaj tagi otwierające i zamykające <kolumny> między tagami otwierania i zamykania kontrolki GridView. Następnie wyświetl listę pól kolumn, które chcesz uwzględnić między otwarciem i zamknięciem <tagów Kolumny> . Określone kolumny są dodawane do kolekcji Kolumny w podanej kolejności. Kolekcja Columns przechowuje wszystkie pola kolumn w kontrolce i umożliwia programowe zarządzanie polami kolumn w kontrolce GridView.
Jawnie zadeklarowane pola kolumn można wyświetlać w połączeniu z automatycznie wygenerowanymi polami kolumn. W przypadku użycia obu pól kolumn jawnie zadeklarowane są najpierw renderowane, a następnie automatycznie generowane pola kolumn.
Wiązanie z kontrolą źródła danych
Kontrolka GridView może być powiązana z kontrolką źródła danych (taką jak SqlDataSource, ObjectDataSource itd.), a także z dowolnym źródłem danych, które implementuje interfejs System.Collections.IEnumerable (taki jak System.DataView, System.Collections.ArrayList lub System.Collections.Hashtable). Użyj jednej z następujących metod, aby powiązać kontrolkę GridView z odpowiednim typem źródła danych:
- Aby powiązać kontrolkę źródła danych, ustaw właściwość DataSourceID kontrolki GridView na wartość ID kontrolki źródła danych. Kontrolka GridView automatycznie wiąże się z określoną kontrolą źródła danych i może korzystać z możliwości kontroli źródła danych w celu przeprowadzania sortowania, aktualizowania, usuwania i stronicowania. Jest to preferowana metoda powiązania z danymi.
- Aby powiązać ze źródłem danych, które implementuje interfejs System.Collections.IEnumerable, programowo ustaw właściwość DataSource kontrolki GridView na źródło danych, a następnie wywołaj metodę DataBind. W przypadku korzystania z tej metody kontrolka GridView nie udostępnia wbudowanych funkcji sortowania, aktualizowania, usuwania i stronicowania. Musisz samodzielnie podać tę funkcję.
Operacje kontrolki GridView
Kontrolka GridView udostępnia wiele wbudowanych funkcji, które umożliwiają użytkownikowi sortowanie, aktualizowanie, usuwanie, wybieranie i stronicowanie elementów w kontrolce. Gdy kontrolka GridView jest powiązana z kontrolką źródła danych, kontrolka GridView może korzystać z możliwości kontroli źródła danych i zapewnić automatyczne sortowanie, aktualizowanie i usuwanie funkcji.
Uwaga
Kontrolka GridView może zapewnić obsługę sortowania, aktualizowania i usuwania z innymi typami źródeł danych; należy jednak zapewnić odpowiednią procedurę obsługi zdarzeń z implementacją tych operacji.
Sortowanie umożliwia użytkownikowi sortowanie elementów w kontrolce GridView w odniesieniu do określonej kolumny, klikając nagłówek kolumny. Aby włączyć sortowanie, ustaw właściwość AllowSorting na true.
Automatyczne aktualizowanie, usuwanie i wybieranie funkcji są włączone, gdy przycisk w polu kolumny ButtonField lub TemplateField z nazwą polecenia "Edytuj", "Usuń" i "Wybierz", odpowiednio, jest klikany. Kontrolka GridView może automatycznie dodawać pole kolumny CommandField z przyciskiem Edytuj, Usuń lub Wybierz, jeśli właściwość AutoGenerateEditButton, AutoGenerateDeleteButton lub AutoGenerateSelectButton jest ustawiona na wartość true.
Uwaga
Wstawianie rekordów do źródła danych nie jest bezpośrednio obsługiwane przez kontrolkę GridView. Można jednak wstawić rekordy przy użyciu kontrolki GridView w połączeniu z kontrolką DetailsView lub FormView.
Zamiast wyświetlać wszystkie rekordy w źródle danych jednocześnie, kontrolka GridView może automatycznie podzielić rekordy na strony. Aby włączyć stronicowanie, ustaw właściwość AllowPaging na true.
Dostosowywanie wyglądu elementu GridView
Wygląd kontrolki GridView można dostosować, ustawiając właściwości stylu dla różnych części kontrolki. W poniższej tabeli wymieniono różne właściwości stylu.
Właściwość Stylu | Opis |
---|---|
Alternatingrowstyle | Ustawienia stylu dla przemiennych wierszy danych w kontrolce GridView. Po ustawieniu tej właściwości wiersze danych są wyświetlane na przemian między ustawieniami RowStyle a ustawieniami AlternatingRowStyle . |
Editrowstyle | Ustawienia stylu dla wiersza edytowanego w kontrolce GridView. |
Emptydatarowstyle | Ustawienia stylu pustego wiersza danych wyświetlanego w kontrolce GridView, gdy źródło danych nie zawiera żadnych rekordów. |
Footerstyle | Ustawienia stylu dla wiersza stopki kontrolki GridView. |
Headerstyle | Ustawienia stylu wiersza nagłówka kontrolki GridView. |
Pagerstyle | Ustawienia stylu dla wiersza pager kontrolki GridView. |
Rowstyle | Ustawienia stylu wierszy danych w kontrolce GridView. Po ustawieniu właściwości AlternatingRowStyle wiersze danych są wyświetlane na przemian między ustawieniami RowStyle a ustawieniami AlternatingRowStyle . |
SelectedRowStyle | Ustawienia stylu wybranego wiersza w kontrolce GridView. |
Możesz również pokazać lub ukryć różne części kontrolki. W poniższej tabeli wymieniono właściwości, które kontrolują, które części są wyświetlane lub ukryte.
Właściwość | Opis |
---|---|
ShowFooter | Pokazuje lub ukrywa sekcję stopki kontrolki GridView. |
Showheader | Pokazuje lub ukrywa sekcję nagłówka kontrolki GridView. |
Zdarzenia
Kontrolka GridView udostępnia kilka zdarzeń, względem których można programować. Dzięki temu można uruchamiać niestandardową procedurę za każdym razem, gdy wystąpi zdarzenie. W poniższej tabeli wymieniono zdarzenia obsługiwane przez kontrolkę GridView.
Zdarzenie | Opis |
---|---|
Pageindexchanged | Występuje po kliknięciu jednego z przycisków pager, ale po naciśnięciu kontrolki GridView obsługuje operację stronicowania. To zdarzenie jest często używane, gdy trzeba wykonać zadanie po przejściu użytkownika do innej strony w kontrolce. |
Pageindexchanging | Występuje po kliknięciu jednego z przycisków pager, ale zanim kontrolka GridView obsłuży operację stronicowania. To zdarzenie jest często używane do anulowania operacji stronicowania. |
RowCancelingEdit | Występuje po kliknięciu przycisku Anuluj wiersza, ale przed zamknięciem trybu edycji kontrolki GridView. To zdarzenie jest często używane do zatrzymywania operacji anulowania. |
Wierszpolecenia | Występuje po kliknięciu przycisku w kontrolce GridView. To zdarzenie jest często używane do wykonywania zadania po kliknięciu przycisku w kontrolce. |
WierszTworzenie | Występuje po utworzeniu nowego wiersza w kontrolce GridView. To zdarzenie jest często używane do modyfikowania zawartości wiersza podczas tworzenia wiersza. |
RowDataBound | Występuje, gdy wiersz danych jest powiązany z danymi w kontrolce GridView. To zdarzenie jest często używane do modyfikowania zawartości wiersza, gdy wiersz jest powiązany z danymi. |
Rowdeleted | Występuje po kliknięciu przycisku Usuń wiersza, ale po kontrolce GridView usunie rekord ze źródła danych. To zdarzenie jest często używane do sprawdzania wyników operacji usuwania. |
Rowdeleting | Występuje po kliknięciu przycisku Usuń wiersza, ale zanim kontrolka GridView usunie rekord ze źródła danych. To zdarzenie jest często używane do anulowania operacji usuwania. |
Rowediting | Występuje po kliknięciu przycisku Edytuj wiersza, ale zanim kontrolka GridView przejdzie w tryb edycji. To zdarzenie jest często używane do anulowania operacji edycji. |
Rowupdated | Występuje po kliknięciu przycisku Aktualizuj wiersza, ale po zaktualizowaniu wiersza kontrolki GridView. To zdarzenie jest często używane do sprawdzania wyników operacji aktualizacji. |
Rowupdating | Występuje po kliknięciu przycisku Aktualizuj wiersza, ale przed zaktualizowaniem wiersza kontrolki GridView. To zdarzenie jest często używane do anulowania operacji aktualizowania. |
Selectedindexchanged | Występuje po kliknięciu przycisku Select wiersza, ale po naciśnięciu kontrolki GridView obsłuży operację wybierania. To zdarzenie jest często używane do wykonywania zadania po wybraniu wiersza w kontrolce. |
Selectedindexchanging | Występuje po kliknięciu przycisku Select wiersza, ale zanim kontrolka GridView obsłuży operację wybierania. To zdarzenie jest często używane do anulowania operacji wyboru. |
Sorted | Występuje, gdy hiperłącze do sortowania kolumny jest klikane, ale po kontrolce GridView obsługuje operację sortowania. To zdarzenie jest często używane do wykonywania zadania po kliknięciu hiperlinku w celu posortowania kolumny. |
Sortowanie | Występuje, gdy hiperłącze do sortowania kolumny jest klikane, ale zanim kontrolka GridView obsłuży operację sortowania. To zdarzenie jest często używane do anulowania operacji sortowania lub wykonywania niestandardowej procedury sortowania. |
Formview
Kontrolka FormView służy do wyświetlania pojedynczego rekordu ze źródła danych. Jest podobny do kontrolki DetailsView, z wyjątkiem wyświetlania szablonów zdefiniowanych przez użytkownika zamiast pól wierszy. Tworzenie własnych szablonów zapewnia większą elastyczność w kontrolowaniu sposobu wyświetlania danych. Kontrolka FormView obsługuje następujące funkcje:
- Wiązanie z kontrolkami źródła danych, takimi jak SqlDataSource i ObjectDataSource.
- Wbudowane możliwości wstawiania.
- Wbudowane funkcje aktualizowania i usuwania.
- Wbudowane możliwości stronicowania.
- Programowy dostęp do modelu obiektu FormView w celu dynamicznego ustawiania właściwości, obsługi zdarzeń itd.
- Dostosowywalny wygląd za pomocą szablonów, motywów i stylów zdefiniowanych przez użytkownika.
Szablony
Aby kontrolka FormView wyświetlała zawartość, należy utworzyć szablony dla różnych części kontrolki. Większość szablonów jest opcjonalna; należy jednak utworzyć szablon dla trybu, w którym skonfigurowano kontrolkę. Na przykład kontrolka FormView, która obsługuje wstawianie rekordów, musi mieć zdefiniowany szablon wstaw elementu. W poniższej tabeli wymieniono różne szablony, które można utworzyć.
Typ szablonu | Opis |
---|---|
Edititemtemplate | Definiuje zawartość wiersza danych, gdy kontrolka FormView jest w trybie edycji. Ten szablon zwykle zawiera kontrolki wejściowe i przyciski poleceń, za pomocą których użytkownik może edytować istniejący rekord. |
Emptydatatemplate | Definiuje zawartość pustego wiersza danych wyświetlanego, gdy kontrolka FormView jest powiązana ze źródłem danych, które nie zawiera żadnych rekordów. Ten szablon zwykle zawiera zawartość, aby powiadomić użytkownika, że źródło danych nie zawiera żadnych rekordów. |
Footertemplate | Definiuje zawartość wiersza stopki. Ten szablon zwykle zawiera dodatkową zawartość, którą chcesz wyświetlić w wierszu stopki. Alternatywnie możesz po prostu określić tekst wyświetlany w wierszu stopki, ustawiając właściwość FooterText. |
Headertemplate | Definiuje zawartość wiersza nagłówka. Ten szablon zwykle zawiera dodatkową zawartość, którą chcesz wyświetlić w wierszu nagłówka. Alternatywnie możesz po prostu określić tekst do wyświetlenia w wierszu nagłówka, ustawiając właściwość HeaderText. |
Itemtemplate | Definiuje zawartość wiersza danych, gdy kontrolka FormView jest w trybie tylko do odczytu. Ten szablon zwykle zawiera zawartość do wyświetlania wartości istniejącego rekordu. |
Insertitemtemplate | Definiuje zawartość wiersza danych, gdy kontrolka FormView jest w trybie wstawiania. Ten szablon zwykle zawiera kontrolki wejściowe i przyciski poleceń, za pomocą których użytkownik może dodać nowy rekord. |
Pagertemplate | Definiuje zawartość wiersza pagera wyświetlaną po włączeniu funkcji stronicowania (gdy właściwość AllowPaging ma wartość true). Ten szablon zwykle zawiera kontrolki, z którymi użytkownik może przejść do innego rekordu. |
Kontrolki wejściowe w szablonie elementu edycji i wstawiania szablonu elementu można powiązać z polami źródła danych przy użyciu dwukierunkowego wyrażenia powiązania. Dzięki temu kontrolka FormView automatycznie wyodrębnia wartości kontrolki wejściowej dla operacji aktualizacji lub wstawiania. Wyrażenia powiązania dwukierunkowego umożliwiają również kontrolki wejściowe w szablonie elementu edycji, aby automatycznie wyświetlać oryginalne wartości pól.
Wiązanie z danymi
Kontrolka FormView może być powiązana z kontrolką źródła danych (taką jak SqlDataSource, AccessDataSource, ObjectDataSource itd.) lub do dowolnego źródła danych, które implementuje interfejs System.Collections.IEnumerable (taki jak System.Data.DataView, System.Collections.ArrayList i System.Collections.Hashtable). Użyj jednej z następujących metod, aby powiązać kontrolkę FormView z odpowiednim typem źródła danych:
- Aby powiązać kontrolkę źródła danych, ustaw właściwość DataSourceID kontrolki FormView na wartość ID kontrolki źródła danych. Kontrolka FormView automatycznie wiąże się z określoną kontrolą źródła danych i może korzystać z możliwości kontroli źródła danych w celu wstawiania, aktualizowania, usuwania i stronicowania funkcji. Jest to preferowana metoda powiązania z danymi.
- Aby powiązać ze źródłem danych, które implementuje interfejs System.Collections.IEnumerable , programowo ustaw właściwość DataSource kontrolki FormView na źródło danych, a następnie wywołaj metodę DataBind. W przypadku korzystania z tej metody kontrolka FormView nie udostępnia wbudowanych funkcji wstawiania, aktualizowania, usuwania i stronicowania. Musisz podać tę funkcję przy użyciu odpowiedniego zdarzenia.
Operacje kontrolki FormularzView
Kontrolka FormView udostępnia wiele wbudowanych funkcji, które umożliwiają użytkownikowi aktualizowanie, usuwanie, wstawianie i stronicowanie elementów w kontrolce. Gdy kontrolka FormView jest powiązana z kontrolką źródła danych, kontrolka FormView może korzystać z możliwości kontroli źródła danych i zapewnić automatyczne aktualizowanie, usuwanie, wstawianie i stronicowanie. Kontrolka FormView może zapewnić obsługę operacji aktualizacji, usuwania, wstawiania i stronicowania z innymi typami źródeł danych; należy jednak podać odpowiednią procedurę obsługi zdarzeń z implementacją tych operacji.
Ponieważ kontrolka FormView używa szablonów, nie zapewnia sposobu automatycznego generowania przycisków poleceń w celu wykonywania operacji aktualizowania, usuwania ani wstawiania. Należy ręcznie dołączyć te przyciski poleceń do odpowiedniego szablonu. Kontrolka FormView rozpoznaje niektóre przyciski, które mają właściwości CommandName ustawione na określone wartości. W poniższej tabeli wymieniono przyciski poleceń rozpoznawane przez kontrolkę FormView.
Przycisk | Wartość Commandname | Opis |
---|---|---|
Anuluj | "Anuluj" | Służy do aktualizowania lub wstawiania operacji w celu anulowania operacji i odrzucenia wartości wprowadzonych przez użytkownika. Następnie kontrolka FormView powraca do trybu określonego przez właściwość DefaultMode. |
Usuń | "Usuń" | Służy do usuwania operacji usuwania wyświetlanego rekordu ze źródła danych. Zgłasza zdarzenia ItemDeleting i ItemDeleted. |
Edytuj | "Edytuj" | Służy do aktualizowania operacji, aby umieścić kontrolkę FormView w trybie edycji. Zawartość określona we właściwości EditItemTemplate jest wyświetlana dla wiersza danych. |
Insert | "Wstaw" | Używane w operacjach wstawiania do próby wstawienia nowego rekordu w źródle danych przy użyciu wartości dostarczonych przez użytkownika. Zgłasza zdarzenia ItemInserting i ItemInserted. |
Nowy | "Nowy" | Służy do wstawiania operacji, aby umieścić kontrolkę FormView w trybie wstawiania. Zawartość określona we właściwości InsertItemTemplate jest wyświetlana dla wiersza danych. |
Strona | "Strona" | Używane w operacjach stronicowania do reprezentowania przycisku w wierszu pager, który wykonuje stronicowanie. Aby określić operację stronicowania, ustaw właściwość CommandArgument przycisku na "Next", "Prev", "First", "Last" lub indeks strony, do której ma być nawigowane. Zgłasza zdarzenia PageIndexChanging i PageIndexChanged. |
Aktualizacja | "Aktualizuj" | Używany w operacjach aktualizacji do próby zaktualizowania wyświetlanego rekordu w źródle danych z wartościami dostarczonymi przez użytkownika. Zgłasza zdarzenia ItemUpdating i ItemUpdated. |
W przeciwieństwie do przycisku Usuń (który usuwa wyświetlany rekord natychmiast), po kliknięciu przycisku Edytuj lub Nowy kontrolka FormView przechodzi odpowiednio do trybu edycji lub wstawiania. W trybie edycji zawartość zawarta we właściwości EditItemTemplate jest wyświetlana dla bieżącego elementu danych. Zazwyczaj szablon edycji elementu jest zdefiniowany tak, aby przycisk Edytuj został zastąpiony przyciskiem Aktualizuj i Anuluj. Kontrolki wejściowe, które są odpowiednie dla typu danych pola (na przykład TextBox lub kontrolka CheckBox) są również zwykle wyświetlane z wartością pola dla użytkownika do zmodyfikowania. Kliknięcie przycisku Aktualizuj aktualizuje rekord w źródle danych, klikając przycisk Anuluj porzuca wszelkie zmiany.
Podobnie zawartość zawarta we właściwości InsertItemTemplate jest wyświetlana dla elementu danych, gdy kontrolka jest w trybie wstawiania. Szablon wstaw elementu jest zwykle zdefiniowany, tak aby przycisk Nowy został zastąpiony przyciskiem Wstaw i Anuluj, a puste kontrolki wejściowe są wyświetlane dla użytkownika w celu wprowadzenia wartości dla nowego rekordu. Kliknięcie przycisku Wstaw powoduje wstawienie rekordu w źródle danych, a następnie kliknięcie przycisku Anuluj powoduje porzucenie wszelkich zmian.
Kontrolka FormView udostępnia funkcję stronicowania, która umożliwia użytkownikowi przechodzenie do innych rekordów w źródle danych. Po włączeniu wiersza pager jest wyświetlany w kontrolce FormView, która zawiera kontrolki nawigacji strony. Aby włączyć stronicowanie, ustaw właściwość AllowPaging na true. Wiersz pagera można dostosować, ustawiając właściwości obiektów zawartych w właściwości PagerStyle i PagerSettings. Zamiast korzystać z wbudowanego interfejsu użytkownika wiersza stronicowania, możesz utworzyć własny interfejs użytkownika przy użyciu właściwości PagerTemplate .
Dostosowywanie wyglądu elementu FormView
Wygląd kontrolki FormView można dostosować, ustawiając właściwości stylu dla różnych części kontrolki. W poniższej tabeli wymieniono różne właściwości stylu.
Właściwość Stylu | Opis |
---|---|
Editrowstyle | Ustawienia stylu wiersza danych, gdy kontrolka FormView jest w trybie edycji. |
Emptydatarowstyle | Ustawienia stylu pustego wiersza danych wyświetlanego w kontrolce FormView, gdy źródło danych nie zawiera żadnych rekordów. |
Footerstyle | Ustawienia stylu dla wiersza stopki kontrolki FormView. |
Headerstyle | Ustawienia stylu dla wiersza nagłówka kontrolki FormView. |
InsertRowStyle | Ustawienia stylu wiersza danych, gdy kontrolka FormView jest w trybie wstawiania. |
Pagerstyle | Ustawienia stylu wiersza pager wyświetlanego w kontrolce FormView po włączeniu funkcji stronicowania. |
Rowstyle | Ustawienia stylu wiersza danych, gdy kontrolka FormView jest w trybie tylko do odczytu. |
Zdarzenia widoku formularzy
Kontrolka FormView udostępnia kilka zdarzeń, względem których można programować. Dzięki temu można uruchamiać niestandardową procedurę za każdym razem, gdy wystąpi zdarzenie. W poniższej tabeli wymieniono zdarzenia obsługiwane przez kontrolkę FormView.
Zdarzenie | Opis |
---|---|
Itemcommand | Występuje po kliknięciu przycisku w kontrolce FormView. To zdarzenie jest często używane do wykonywania zadania po kliknięciu przycisku w kontrolce. |
Itemcreated | Występuje po utworzeniu wszystkich obiektów FormViewRow w kontrolce FormView. To zdarzenie jest często używane do modyfikowania wartości rekordu przed jego wyświetleniem. |
Itemdeleted | Występuje po kliknięciu przycisku Usuń (przycisku z właściwością CommandName ustawionej na wartość "Usuń"), ale po kontrolce FormView rekord zostanie usunięty ze źródła danych. To zdarzenie jest często używane do sprawdzania wyników operacji usuwania. |
Itemdeleting | Występuje po kliknięciu przycisku Usuń, ale zanim kontrolka FormView usunie rekord ze źródła danych. To zdarzenie jest często używane do anulowania operacji usuwania. |
Iteminserted | Występuje po kliknięciu przycisku Wstaw (przycisku z właściwością CommandName ustawionej na wartość "Wstaw"), ale po wstawieniu rekordu kontrolki FormView. To zdarzenie jest często używane do sprawdzania wyników operacji wstawiania. |
Iteminserting | Występuje po kliknięciu przycisku Wstaw, ale zanim kontrolka FormView wstawi rekord. To zdarzenie jest często używane do anulowania operacji wstawiania. |
Itemupdated | Występuje po kliknięciu przycisku Aktualizuj (przycisku z właściwością CommandName ustawioną na wartość "Aktualizuj"), ale po zaktualizowaniu wiersza kontrolki FormView. To zdarzenie jest często używane do sprawdzania wyników operacji aktualizacji. |
Itemupdating | Występuje po kliknięciu przycisku Aktualizuj, ale zanim kontrolka FormView zaktualizuje rekord. To zdarzenie jest często używane do anulowania operacji aktualizacji. |
Modechanged | Występuje po zmianie trybów kontrolki FormView (do edycji, wstawiania lub tylko do odczytu). To zdarzenie jest często używane do wykonywania zadania, gdy kontrolka FormView zmienia tryby. |
Modechanging | Występuje przed zmianą trybów kontrolki FormView (do edycji, wstawiania lub tylko do odczytu). To zdarzenie jest często używane do anulowania zmiany trybu. |
Pageindexchanged | Występuje po kliknięciu jednego z przycisków pager, ale po naciśnięciu kontrolki FormView obsługuje operację stronicowania. To zdarzenie jest często używane, gdy trzeba wykonać zadanie po przejściu użytkownika do innego rekordu w kontrolce. |
Pageindexchanging | Występuje po kliknięciu jednego z przycisków pager, ale zanim kontrolka FormView obsłuży operację stronicowania. To zdarzenie jest często używane do anulowania operacji stronicowania. |
Detailsview
Kontrolka DetailsView służy do wyświetlania pojedynczego rekordu ze źródła danych w tabeli, gdzie każde pole rekordu jest wyświetlane w wierszu tabeli. Można jej używać w połączeniu z kontrolką GridView dla scenariuszy ze szczegółami głównymi. Kontrolka DetailsView obsługuje następujące funkcje:
- Wiązanie z kontrolkami źródła danych, takimi jak SqlDataSource.
- Wbudowane możliwości wstawiania.
- Wbudowane funkcje aktualizowania i usuwania.
- Wbudowane możliwości stronicowania.
- Programowy dostęp do modelu obiektów DetailsView w celu dynamicznego ustawiania właściwości, obsługi zdarzeń itd.
- Dostosowywalny wygląd za pomocą motywów i stylów.
Pola wierszy
Każdy wiersz danych w kontrolce DetailsView jest tworzony przez zadeklarowanie kontrolki pola. Różne typy pól wierszy określają zachowanie wierszy w kontrolce. Kontrolki pól pochodzą z pola DataControlField. W poniższej tabeli wymieniono różne typy pól wierszy, których można użyć.
Typ pola kolumny | Opis |
---|---|
Boundfield | Wyświetla wartość pola w źródle danych jako tekst. |
Buttonfield | Wyświetla przycisk polecenia w kontrolce DetailsView. Dzięki temu można wyświetlić wiersz z kontrolką przycisku niestandardowego, taką jak przycisk Dodaj lub Usuń. |
Checkboxfield | Wyświetla pole wyboru w kontrolce DetailsView. Ten typ pola wiersza jest często używany do wyświetlania pól z wartością logiczną. |
Commandfield | Wyświetla wbudowane przyciski poleceń do wykonywania operacji edycji, wstawiania lub usuwania w kontrolce DetailsView. |
Hyperlinkfield | Wyświetla wartość pola w źródle danych jako hiperlink. Ten typ pola wiersza umożliwia powiązanie drugiego pola z adresem URL hiperłącza. |
Imagefield | Wyświetla obraz w kontrolce DetailsView. |
Templatefield | Wyświetla zawartość zdefiniowaną przez użytkownika dla wiersza w kontrolce DetailsView zgodnie z określonym szablonem. Ten typ pola wiersza umożliwia utworzenie niestandardowego pola wiersza. |
Domyślnie właściwość AutoGenerateRows jest ustawiona na wartość true, która automatycznie generuje obiekt pola powiązanego wiersza dla każdego pola typu możliwego do powiązania w źródle danych. Prawidłowe typy możliwe do powiązania to String, DateTime, Decimal, Guid i zestaw typów pierwotnych. Każde pole jest następnie wyświetlane w wierszu jako tekst w kolejności, w jakiej każde pole pojawia się w źródle danych.
Automatyczne generowanie wierszy zapewnia szybki i łatwy sposób wyświetlania każdego pola w rekordzie. Aby jednak korzystać z zaawansowanych możliwości kontrolki DetailsView, należy jawnie zadeklarować pola wierszy do uwzględnienia w kontrolce DetailsView. Aby zadeklarować pola wierszy, najpierw ustaw właściwość AutoGenerateRows na wartość false. Następnie dodaj otwierające i zamykające tagi Pola> między tagami otwierania i zamykania< kontrolki DetailsView. Na koniec wyświetl listę pól wierszy, które chcesz uwzględnić między otwierającymi i zamykającymi <tagami Pola> . Określone pola wierszy są dodawane do kolekcji Pola w podanej kolejności. Kolekcja Pola umożliwia programowe zarządzanie polami wierszy w kontrolce DetailsView.
Uwaga
Pola wierszy generowanych automatycznie nie są dodawane do kolekcji Pola.
Wiązanie z danymi za pomocą kontrolki DetailsView
Kontrolkę DetailsView można powiązać z kontrolką źródła danych, taką jak SqlDataSource lub AccessDataSource , albo do dowolnego źródła danych, które implementuje interfejs System.Collections.IEnumerable, taki jak System.Data.DataView, System.Collections.ArrayList i System.Collections.Hashtable.
Użyj jednej z następujących metod, aby powiązać kontrolkę DetailsView z odpowiednim typem źródła danych:
- Aby powiązać z kontrolką źródła danych, ustaw właściwość DataSourceID kontrolki DetailsView na wartość ID kontrolki źródła danych. Kontrolka DetailsView automatycznie wiąże się z określoną kontrolą źródła danych. Jest to preferowana metoda powiązania z danymi.
- Aby powiązać ze źródłem danych, które implementuje interfejs System.Collections.IEnumerable , programowo ustaw właściwość DataSource kontrolki DetailsView na źródło danych, a następnie wywołaj metodę DataBind.
Zabezpieczenia
Ta kontrolka może służyć do wyświetlania danych wejściowych użytkownika, które mogą obejmować złośliwy skrypt klienta. Przed wyświetleniem w aplikacji sprawdź informacje wysyłane z klienta pod kątem skryptu wykonywalnego, instrukcji SQL lub innego kodu. ASP.NET udostępnia funkcję weryfikacji żądania wejściowego w celu blokowania skryptu i kodu HTML w danych wejściowych użytkownika.
Operacje na danych w obiekcie DetailsView
Kontrolka DetailsView udostępnia wbudowane funkcje, które umożliwiają użytkownikowi aktualizowanie, usuwanie, wstawianie i stronicowanie elementów w kontrolce. Gdy kontrolka DetailsView jest powiązana z kontrolką źródła danych, kontrolka DetailsView może korzystać z funkcji kontroli źródła danych i zapewnić automatyczne aktualizowanie, usuwanie, wstawianie i stronicowanie.
Kontrolka DetailsView może zapewnić obsługę operacji aktualizacji, usuwania, wstawiania i stronicowania z innymi typami źródeł danych; należy jednak zapewnić implementację tych operacji w odpowiednim procedurze obsługi zdarzeń.
Kontrolka DetailsView może automatycznie dodawać pole wiersza CommandField za pomocą przycisku Edytuj, Usuń lub Nowy, ustawiając odpowiednio właściwość AutoGenerateEditButton, AutoGenerateDeleteButton lub AutoGenerateInsertButton. W przeciwieństwie do przycisku Usuń (który natychmiast usuwa wybrany rekord), po kliknięciu przycisku Edytuj lub Nowy kontrolka DetailsView przechodzi odpowiednio do trybu edycji lub wstawiania. W trybie edycji przycisk Edytuj jest zastępowany przyciskiem Aktualizuj i Anuluj. Kontrolki wejściowe, które są odpowiednie dla typu danych pola (np. Kontrolka TextBox lub CheckBox) są wyświetlane z wartością pola, którą użytkownik może zmodyfikować. Kliknięcie przycisku Aktualizuj aktualizuje rekord w źródle danych, klikając przycisk Anuluj porzuca wszelkie zmiany. Podobnie w trybie wstawiania przycisk Nowy jest zastępowany przyciskiem Wstaw i Anuluj, a puste kontrolki wejściowe są wyświetlane dla użytkownika w celu wprowadzenia wartości dla nowego rekordu.
Kontrolka DetailsView udostępnia funkcję stronicowania, która umożliwia użytkownikowi przechodzenie do innych rekordów w źródle danych. Po włączeniu kontrolki nawigacji stron są wyświetlane w wierszu pager. Aby włączyć stronicowanie, ustaw właściwość AllowPaging na wartość true. Wiersz pagera można dostosować przy użyciu właściwości PagerStyle i PagerSettings.
Dostosowywanie wyglądu kontrolki DetailsView
Wygląd kontrolki DetailsView można dostosować, ustawiając właściwości stylu dla różnych części kontrolki. W poniższej tabeli wymieniono różne właściwości stylu.
Właściwość Stylu | Opis |
---|---|
Alternatingrowstyle | Ustawienia stylu dla przemiennych wierszy danych w kontrolce DetailsView. Po ustawieniu tej właściwości wiersze danych są wyświetlane na przemian między ustawieniami RowStyle a ustawieniami AlternatingRowStyle . |
CommandRowStyle | Ustawienia stylu wiersza zawierającego wbudowane przyciski poleceń w kontrolce DetailsView. |
Editrowstyle | Ustawienia stylu wierszy danych, gdy kontrolka DetailsView jest w trybie edycji. |
Emptydatarowstyle | Ustawienia stylu pustego wiersza danych wyświetlanego w kontrolce DetailsView, gdy źródło danych nie zawiera żadnych rekordów. |
Footerstyle | Ustawienia stylu dla wiersza stopki kontrolki DetailsView. |
Headerstyle | Ustawienia stylu wiersza nagłówka kontrolki DetailsView. |
InsertRowStyle | Ustawienia stylu wierszy danych, gdy kontrolka DetailsView jest w trybie wstawiania. |
Pagerstyle | Ustawienia stylu dla wiersza pagera kontrolki DetailsView. |
Rowstyle | Ustawienia stylu wierszy danych w kontrolce DetailsView. Po ustawieniu właściwości AlternatingRowStyle wiersze danych są wyświetlane na przemian między ustawieniami RowStyle a ustawieniami AlternatingRowStyle . |
FieldHeaderStyle | Ustawienia stylu dla kolumny nagłówka kontrolki DetailsView. |
Zdarzenia w widoku Szczegółów
Kontrolka DetailsView udostępnia kilka zdarzeń, względem których można programować. Dzięki temu można uruchamiać niestandardową procedurę za każdym razem, gdy wystąpi zdarzenie. W poniższej tabeli wymieniono zdarzenia obsługiwane przez kontrolkę DetailsView. Kontrolka DetailsView dziedziczy również te zdarzenia z klas bazowych: DataBinding, DataBound, Disposed, Init, Load, PreRender i Render.
Zdarzenie | Opis |
---|---|
Itemcommand | Występuje po kliknięciu przycisku w kontrolce DetailsView. |
Itemcreated | Występuje po utworzeniu wszystkich obiektów DetailsViewRow w kontrolce DetailsView. To zdarzenie jest często używane do modyfikowania wartości rekordu przed jego wyświetleniem. |
Itemdeleted | Występuje po kliknięciu przycisku Usuń, ale po kontrolce DetailsView usuwa rekord ze źródła danych. To zdarzenie jest często używane do sprawdzania wyników operacji usuwania. |
Itemdeleting | Występuje po kliknięciu przycisku Usuń, ale zanim kontrolka DetailsView usunie rekord ze źródła danych. To zdarzenie jest często używane do anulowania operacji usuwania. |
Iteminserted | Występuje po kliknięciu przycisku Wstaw, ale po wstawieniu rekordu kontrolki DetailsView. To zdarzenie jest często używane do sprawdzania wyników operacji wstawiania. |
Iteminserting | Występuje po kliknięciu przycisku Wstaw, ale zanim kontrolka DetailsView wstawi rekord. To zdarzenie jest często używane do anulowania operacji wstawiania. |
Itemupdated | Występuje po kliknięciu przycisku Aktualizuj, ale po zaktualizowaniu wiersza kontrolki DetailsView. To zdarzenie jest często używane do sprawdzania wyników operacji aktualizacji. |
Itemupdating | Występuje po kliknięciu przycisku Aktualizuj, ale zanim kontrolka DetailsView zaktualizuje rekord. To zdarzenie jest często używane do anulowania operacji aktualizacji. |
Modechanged | Występuje po zmianie trybów kontrolki DetailsView (tryb edycji, wstawiania lub tylko do odczytu). To zdarzenie jest często używane do wykonywania zadania, gdy kontrolka DetailsView zmienia tryby. |
Modechanging | Występuje przed zmianą trybów kontrolki DetailsView (tryb edycji, wstawiania lub tylko do odczytu). To zdarzenie jest często używane do anulowania zmiany trybu. |
Pageindexchanged | Występuje po kliknięciu jednego z przycisków pager, ale po naciśnięciu kontrolki DetailsView obsługuje operację stronicowania. To zdarzenie jest często używane, gdy trzeba wykonać zadanie po przejściu użytkownika do innego rekordu w kontrolce. |
Pageindexchanging | Występuje po kliknięciu jednego z przycisków pager, ale zanim kontrolka DetailsView obsłuży operację stronicowania. To zdarzenie jest często używane do anulowania operacji stronicowania. |
Kontrolka menu
Kontrolka Menu w ASP.NET 2.0 została zaprojektowana tak, aby był w pełni funkcjonalnym systemem nawigacji. Może to być łatwo dane do hierarchicznych źródeł danych, takich jak SiteMapDataSource.
Struktura kontrolek menu może być definiowana deklaratywnie lub dynamicznie i składa się z jednego węzła głównego i dowolnej liczby węzłów podrzędnych. Poniższy kod deklaratywnie definiuje menu dla kontrolki Menu.
<asp:menu id="NavigationMenu" disappearafter="2000" staticdisplaylevels="2" staticsubmenuindent="10" orientation="Vertical" font-names="Arial" target="_blank" runat="server"> <staticmenuitemstyle backcolor="LightSteelBlue" forecolor="Black"/> <statichoverstyle backcolor="LightSkyBlue"/> <dynamicmenuitemstyle backcolor="Black" forecolor="Silver"/> <dynamichoverstyle backcolor="LightSkyBlue" forecolor="Black"/> <items> <asp:menuitem navigateurl="Home.aspx" text="Home" tooltip="Home"> <asp:menuitem navigateurl="Music.aspx" text="Music" tooltip="Music"> <asp:menuitem navigateurl="Classical.aspx" text="Classical" tooltip="Classical"/> <asp:menuitem navigateurl="Rock.aspx" text="Rock" tooltip="Rock"/> <asp:menuitem navigateurl="Jazz.aspx" text="Jazz" tooltip="Jazz"/> </asp:menuitem> <asp:menuitem navigateurl="Movies.aspx" text="Movies" tooltip="Movies"> <asp:menuitem navigateurl="Action.aspx" text="Action" tooltip="Action"/> <asp:menuitem navigateurl="Drama.aspx" text="Drama" tooltip="Drama"/> <asp:menuitem navigateurl="Musical.aspx" text="Musical" tooltip="Musical"/> </asp:menuitem> </asp:menuitem> </items> </asp:menu>
W powyższym przykładzie węzeł Home.aspx jest węzłem głównym. Wszystkie inne węzły są zagnieżdżone w węźle głównym na różnych poziomach.
Istnieją dwa typy menu, które kontrolka Menu może renderować; menu statyczne i menu dynamiczne. Statyczne menu składają się z elementów menu, które są zawsze widoczne. Menu dynamiczne składają się z elementów menu, które są widoczne tylko wtedy, gdy użytkownik umieści na nich wskaźnik myszy. Klienci mogą często mylić statyczne menu z menu zdefiniowanymi deklaratywnie i dynamicznymi menu z menu, które są dane przychodzące w czasie wykonywania. W rzeczywistości dynamiczne i statyczne menu nie są związane z metodą populacji. Terminy statyczne i dynamiczne odwołują się tylko do tego, czy menu jest domyślnie wyświetlane statycznie, czy tylko wtedy, gdy użytkownik podejmuje jakieś działania.
Właściwość StaticDisplayLevels służy do konfigurowania, ile poziomów menu jest statycznych, a zatem domyślnie wyświetlanych. W powyższym przykładzie ustawienie właściwości StaticDisplayLevels na wartość 2 spowoduje, że menu będzie statycznie wyświetlać węzeł główny, węzeł Muzyka i węzeł Filmy. Wszystkie inne węzły będą wyświetlane dynamicznie po umieszczeniu wskaźnika myszy na węźle nadrzędnym.
Właściwość MaximumDynamicDisplayLevels konfiguruje maksymalną liczbę poziomów dynamicznych, które można wyświetlić w menu. Wszystkie menu dynamiczne na poziomie wyższym niż wartość określona przez właściwość MaximumDynamicDisplayLevels są odrzucane.
Uwaga
Jest prawie pewne, że mogą wystąpić sytuacje, w których menu nie wydają się renderować ze względu na właściwość MaximumDynamicDisplayLevels. W takich przypadkach upewnij się, że właściwość jest ustawiona wystarczająco, aby umożliwić wyświetlanie menu klientów.
Powiązanie danych kontrolki menu
Kontrolka Menu może być powiązana z dowolnym hierarchicznym źródłem danych, takim jak SiteMapDataSource lub XMLDataSource. SiteMapDataSource jest najczęściej używaną metodą powiązania danych z kontrolką Menu, ponieważ przekazuje ona plik web.sitemap, a jego schemat udostępnia znany interfejs API do kontrolki Menu. Poniższa lista zawiera prosty plik web.sitemap.
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="~/default.aspx" description="Our Home Page" title="Home"> <siteMapNode url="~/products/default.aspx" title="Products" description="Our Products"> <siteMapNode url="~/products/winprods.aspx" title="Windows Products" description="Windows Products" /> <siteMapNode url="~/products/webprods.aspx" title="Web Products" description="Web Products" /> </siteMapNode> <siteMapNode url="~/services/default.aspx" title="Services" description="Our Services"> <siteMapNode url="~/services/consulting.aspx" title="Consulting Services" description="Consulting Services" /> <siteMapNode url="~/services/develop.aspx" title="Development Services" description="Development Services" /> </siteMapNode> </siteMapNode> </siteMap>
Zwróć uwagę, że w tym przypadku istnieje tylko jeden element główny siteMapNode. Dla każdego węzła siteMapNode można skonfigurować kilka atrybutów. Najczęściej używane atrybuty to:
- Adres url Określa adres URL do wyświetlenia, gdy użytkownik kliknie element menu. Jeśli ten atrybut nie jest obecny, węzeł po prostu opublikuje go po kliknięciu.
- Tytuł Określa tekst wyświetlany w elemencie menu.
- Opis Używana jako dokumentacja węzła. Ponadto jest wyświetlana jako wskazówka narzędzia po umieszczeniu wskaźnika myszy na węźle.
- siteMapFile Umożliwia zagnieżdżone mapy witryn. Ten atrybut musi wskazywać dobrze sformułowany ASP.NET pliku mapy witryny.
- Ról Umożliwia kontrolowanie wyglądu węzła przez ASP.NET przycinanie zabezpieczeń.
Należy pamiętać, że chociaż te atrybuty są opcjonalne, zachowanie menu może nie być oczekiwane, jeśli nie zostaną określone. Jeśli na przykład atrybut adresu URL jest określony, ale atrybut opisu nie jest, węzeł nie będzie widoczny i nie będzie można przejść do określonego adresu URL.
Sterowanie operacją menu
Istnieje kilka właściwości wpływających na działanie kontrolki menu ASP.NET; właściwość Orientation , właściwość DisappearAfter , właściwość StaticItemFormatString i właściwość StaticPopoutImageUrl to tylko kilka z nich.
- Orientację można ustawić na poziomą lub pionową i kontrolować, czy statyczne elementy menu są rozmieszczone w poziomie w wierszu lub w pionie i skumulowane na sobie. Ta właściwość nie ma wpływu na menu dynamiczne.
- Właściwość DisappearAfter konfiguruje, jak długo dynamiczne menu powinno pozostać widoczne po przeniesieniu myszy. Wartość jest określona w milisekundach i domyślnie wynosi 500. Ustawienie tej właściwości na wartość -1 spowoduje, że menu nigdy nie zniknie automatycznie. W takim przypadku menu zniknie tylko wtedy, gdy użytkownik kliknie poza menu.
- Właściwość StaticItemFormatString ułatwia konserwację spójnych czasowników w systemie menu. Podczas określania tej właściwości {0} należy wprowadzić opis wyświetlany w źródle danych. Na przykład, aby element menu z ćwiczenia 1 powiedział Visit Our Products Page itp., należy określić Odwiedź naszą {0} stronę dla staticItemFormatString. W czasie wykonywania ASP.NET zastąpi wszelkie wystąpienia {0} prawidłowym opisem elementu menu.
- Właściwość StaticPopoutImageUrl określa obraz używany do wskazania, że określony węzeł menu ma węzły podrzędne, do których można uzyskać dostęp, umieszczając kursor na nim. Menu dynamiczne będą nadal używać obrazu domyślnego.
Kontrolki menu szablonów
Kontrolka Menu jest kontrolką szablonu i umożliwia korzystanie z dwóch różnych elementówTemplates; element StaticItemTemplate i dynamicItemTemplate. Za pomocą tych szablonów można łatwo dodawać kontrolki serwera lub kontrolki użytkownika do menu.
Aby edytować szablony w programie Visual Studio .NET, kliknij przycisk Tag inteligentny w menu i wybierz pozycję Edytuj szablony. Następnie możesz wybrać między edytowaniem elementu StaticItemTemplate lub dynamicItemTemplate.
Wszystkie kontrolki dodane do elementu StaticItemTemplate będą wyświetlane w menu statycznym po załadowaniu strony. Wszystkie kontrolki dodane do elementu DynamicItemTemplate będą wyświetlane we wszystkich wyskakujących menu.
Zdarzenia menu
Kontrolka Menu ma dwa zdarzenia, które są dla niego unikatowe; menuItemClicked i zdarzenie MenuItemDatabound .
Zdarzenie MenuItemClicked jest wywoływane po kliknięciu elementu menu. Zdarzenie MenuItemDatabound jest wywoływane, gdy element menu jest przychodzący. Element MenuEventArgs przekazywany do programu obsługi zdarzeń zapewnia dostęp do elementu menu za pośrednictwem właściwości Item.
Kontrolowanie wyglądu menu
Można również wpływać na wygląd kontrolki menu przy użyciu jednego lub wielu stylów dostępnych do formatowania menu. Wśród nich są StaticMenuStyle, DynamicMenuStyle, DynamicMenuItemStyle, DynamicSelectedStyle i DynamicHoverStyle. Te właściwości są konfigurowane przy użyciu standardowego ciągu stylu HTML. Na przykład następujące informacje będą mieć wpływ na styl menu dynamicznych.
<DynamicMenuStyle BorderStyle="Outset" BorderWidth="1px"
BackColor="#D6D3CE" />
Uwaga
Jeśli używasz dowolnego ze stylów aktywowania, musisz dodać <element główny> do strony z elementem Runat ustawionym na serwer.
Kontrolki menu obsługują również używanie motywów ASP.NET 2.0.
Kontrolka TreeView
Kontrolka TreeView wyświetla dane w strukturze podobnej do drzewa. Podobnie jak w przypadku kontrolki Menu, dane mogą być łatwo powiązane z dowolnym hierarchicznym źródłem danych, takim jak SiteMapDataSource.
Pierwsze pytanie, które klienci mogą zadać o kontrolce TreeView w ASP.NET 2.0, jest to, czy jest to związane z kontrolką WebControl treeView IE, która była dostępna dla ASP.NET 1.x. To nie jest. Kontrolka TreeView ASP.NET 2.0 została napisana od podstaw i oferuje znaczną poprawę nad kontrolką WebControl IE TreeView, która była wcześniej dostępna.
Nie będę szczegółowo omawiać sposobu powiązania kontrolki TreeView z mapą witryny, ponieważ jest ona wykonywana dokładnie w taki sam sposób jak kontrolka Menu. Jednak kontrolka TreeView ma pewne różne różnice w sposobie działania.
Domyślnie kontrolka TreeView jest w pełni rozwinięta. Aby zmienić poziom rozszerzenia po początkowym obciążeniu, zmodyfikuj właściwość ExpandDepth kontrolki. Jest to szczególnie ważne w przypadkach, gdy element TreeView jest przychodzący po rozwinięciu określonych węzłów.
DataBinding kontrolki TreeView
W przeciwieństwie do kontrolki Menu element TreeView dobrze nadaje się do obsługi dużych ilości danych. W związku z tym oprócz powiązania danych z elementem SiteMapDataSource lub XMLDataSource funkcja TreeView jest często danymi powiązanymi z zestawem danych lub innymi danymi relacyjnymi. W przypadkach, gdy kontrolka TreeView jest powiązana z dużą ilością danych, najlepiej jest powiązać tylko dane, które są rzeczywiście widoczne w kontrolce. Następnie można powiązać dane z dodatkowymi danymi, ponieważ węzły TreeView są rozwinięte.
W takich przypadkach właściwość PopulateOnDemand elementu TreeView powinna być ustawiona na wartość true. Następnie należy podać implementację metody TreeNodePopulate .
Powiązanie danych bez powrotu po powrocie
Zwróć uwagę, że po rozwinięciu węzła w poprzednim przykładzie po raz pierwszy strona publikuje z powrotem i odświeża. To nie jest problem w tym przykładzie, ale można sobie wyobrazić, że może to być w środowisku produkcyjnym z dużą ilością danych. Lepszym scenariuszem byłoby to, w którym element TreeView nadal dynamicznie wypełniałby swoje węzły, ale bez wpisu z powrotem do serwera.
Ustawiając właściwości PopulateNodesFromClient i PopulateOnDemand na wartość true, kontrolka TreeView ASP.NET będzie dynamicznie wypełniać węzły bez powrotu po powrocie. Po rozwinięciu węzła nadrzędnego zostanie wykonane żądanie XMLHttp od klienta, a zdarzenie OnTreeNodePopulate zostanie wyzwolone. Serwer odpowiada za pomocą wyspy danych XML, która jest następnie używana do powiązania danych węzłów podrzędnych.
ASP.NET dynamicznie tworzy kod klienta, który implementuje tę funkcję. Tagi <skryptu zawierające skrypt> są generowane, wskazując na plik AXD. Na przykład poniższa lista zawiera linki skryptu dla kodu skryptu, który generuje żądanie XMLHttp.
<script src="/WebSite1/WebResource.axd?d=QQG9vSdBi4_k2y9AeP_iww2&
amp;t=632514255396426531"
type="text/javascript"></script>
Jeśli przejrzysz powyższy plik AXD w przeglądarce i otworzysz go, zobaczysz kod implementujący żądanie XMLHttp. Ta metoda uniemożliwia klientom modyfikowanie pliku skryptu.
Sterowanie operacją kontrolki TreeView
Kontrolka TreeView ma kilka właściwości wpływających na działanie kontrolki. Najbardziej oczywiste właściwości to ShowCheckBoxes, ShowExpandCollapse i ShowLines.
Właściwość ShowCheckBoxes ma wpływ na to, czy węzły wyświetlają pole wyboru podczas renderowania. Prawidłowe wartości tej właściwości to None, Root, Parent, Leaf i All. Wpływają one na kontrolkę TreeView w następujący sposób:
Wartość właściwości | Efekt |
---|---|
Brak | Pola wyboru nie są wyświetlane w żadnych węzłach. Jest to ustawienie domyślne. |
Root | Pole wyboru jest wyświetlane tylko w węźle głównym. |
Parent | Pole wyboru jest wyświetlane tylko w tych węzłach, które mają węzły podrzędne. Te węzły podrzędne mogą być węzłami nadrzędnymi lub węzłami liścia. |
Leaf | Pole wyboru jest wyświetlane tylko w tych węzłach, które nie mają węzłów podrzędnych. |
Wszystko | Pole wyboru jest wyświetlane na wszystkich węzłach. |
Gdy są używane pola wyboru, właściwość CheckedNodes zwróci kolekcję węzłów TreeView, które są sprawdzane podczas ogłaszania zwrotnego.
Właściwość ShowExpandCollapse kontroluje wygląd obrazu rozwijania/zwijania obok węzłów głównych i nadrzędnych. Jeśli ta właściwość ma wartość false, węzły TreeView są renderowane jako hiperlinki i są rozwijane/zwinięte, klikając link.
Właściwość ShowLines określa, czy wiersze są wyświetlane łącząc węzły nadrzędne z węzłami podrzędnym. W przypadku wartości false (wartość domyślna) nie są wyświetlane żadne wiersze. Jeśli wartość true, kontrolka TreeView będzie używać obrazów linii w folderze określonym przez właściwość LineImagesFolder .
Aby dostosować wygląd linii TreeView, program Visual Studio .NET 2005 zawiera narzędzie Line Projektant. Dostęp do tego narzędzia można uzyskać za pomocą przycisku Tag inteligentny w kontrolce TreeView, jak pokazano poniżej.
Rysunek 1
Po wybraniu opcji menu Dostosuj obrazy liniowe zostanie uruchomione narzędzie Line Projektant umożliwiające skonfigurowanie wyglądu wierszy TreeView.
Zdarzenia TreeView
Kontrolka TreeView ma następujące unikatowe zdarzenia:
- SelectedNodeChanged występuje po wybraniu węzła na podstawie właściwości SelectAction .
- TreeNodeCheckChanged występuje po zmianie stanu pola wyboru węzłów.
- TreeNodeExpanded występuje, gdy węzeł jest rozwinięty na podstawie właściwości SelectAction .
- TreeNodeCollapsed występuje, gdy węzeł jest zwinięty.
- TreeNodeDataBound występuje, gdy węzeł jest powiązany z danymi.
- TreeNodePopulate występuje po wypełnieniu węzła.
Właściwość SelectAction umożliwia skonfigurowanie, które zdarzenie jest wyzwalane po wybraniu węzła. Właściwość SelectAction udostępnia następujące akcje:
- TreeNodeSelectAction.Expand podnosi węzeł TreeNodeExpanded po wybraniu węzła.
- TreeNodeSelectAction.None nie zgłasza żadnego zdarzenia po wybraniu węzła.
- TreeNodeSelectAction.Select wywołuje zdarzenie SelectedNodeChanged po wybraniu węzła.
- TreeNodeSelectAction.SelectExpand zgłasza zarówno zdarzenie SelectedNodeChanged, jak i zdarzenie TreeNodeExpanded po wybraniu węzła.
Kontrolowanie wyglądu za pomocą kontrolki TreeView
Kontrolka TreeView udostępnia wiele właściwości do kontrolowania wyglądu kontrolki za pomocą stylów. Dostępne są następujące właściwości.
Nazwa właściwości | Formanty |
---|---|
Hovernodestyle | Określa styl węzłów po umieszczeniu kursora myszy na nich. |
LeafNodeStyle | Steruje stylem węzłów liścia. |
Nodestyle | Steruje stylem dla wszystkich węzłów. Style określonego węzła (takie jak LeafNodeStyle) zastępują ten styl. |
ParentNodeStyle | Steruje stylem dla wszystkich węzłów nadrzędnych. |
Rootnodestyle | Steruje stylem węzła głównego. |
Selectednodestyle | Określa styl wybranego węzła. |
Każda z tych właściwości jest tylko do odczytu. Jednak każda z nich zwróci obiekt TreeNodeStyle , a właściwości tego obiektu można zmodyfikować przy użyciu formatu właściwości-podwłaściwości . Aby na przykład ustawić właściwość ForeColorelementu SelectedNodeStyle, należy użyć następującej składni:
<asp:TreeView id=sampleTreeView
SelectedNodeStyle-ForeColor=Blue
runat=server>
Zwróć uwagę, że powyższy tag nie jest zamknięty. Wynika to z tego, że w przypadku używania składni deklaratywnej pokazanej tutaj węzły TreeViews również będą uwzględniane w kodzie HTML.
Właściwości stylu można również określić w kodzie przy użyciu formatu property.subproperty . Aby na przykład ustawić właściwość ForeColorelementu RootNodeStyle w kodzie, należy użyć następującej składni:
treeView1.RootNodeStyle.ForeColor = System.Drawing.Color.Red;
Uwaga
Aby uzyskać kompleksową listę różnych właściwości stylu, zobacz dokumentację MSDN dotyczącą obiektu TreeNodeStyle.
Kontrolka SiteMapPath
Kontrolka SiteMapPath udostępnia kontrolkę nawigacji po rozpadzie stron nadrzędnych dla deweloperów ASP.NET. Podobnie jak w przypadku innych kontrolek nawigacji, dane mogą być łatwo powiązane z hierarchicznymi źródłami danych, takimi jak SiteMapDataSource lub XmlDataSource.
Kontrolka SiteMapPath składa się z obiektów SiteMapNodeItem. Istnieją trzy typy węzłów; węzeł główny, węzły nadrzędne i bieżący węzeł. Węzeł główny jest węzłem w górnej części struktury hierarchicznej. Bieżący węzeł reprezentuje bieżącą stronę. Wszystkie inne węzły są węzłami nadrzędnymi.
Sterowanie działaniem kontrolki SiteMapPath
Właściwości sterujące działaniem kontrolki SiteMapPath są następujące:
Właściwość | Opis właściwości |
---|---|
ParentLevelsDisplayed | Określa liczbę wyświetlanych węzłów nadrzędnych. Wartość domyślna to -1, która nie nakłada żadnych ograniczeń na liczbę wyświetlanych węzłów nadrzędnych. |
Pathdirection | Określa kierunek ścieżki SiteMapPath. Prawidłowe wartości to RootToCurrent (ustawienie domyślne) i CurrentToRoot. |
PathSeparator | Ciąg, który kontroluje znak oddzielający węzły w kontrolce SiteMapPath. Wartość domyślna to :. |
RenderCurrentNodeAsLink | Wartość logiczna określająca, czy bieżący węzeł jest renderowany jako link. Wartość domyślna to False. |
Skiplinktext | Pomaga w ułatwieniu dostępu, gdy strona jest widoczna przez czytniki zawartości ekranu. Ta właściwość umożliwia czytnikom zawartości ekranu pominięcie kontrolki SiteMapPath. Aby wyłączyć tę funkcję, ustaw właściwość na String.Empty. |
Kontrolki SiteMapPath z szablonami
SiteMapControl jest kontrolką szablonu i w związku z tym można zdefiniować różne szablony do użycia w wyświetlaniu kontrolki. Aby edytować szablony w kontrolce SiteMapPath, kliknij przycisk Tag inteligentny w kontrolce i wybierz pozycję Edytuj szablony z menu. Spowoduje to wyświetlenie menu SiteMapTasks, jak pokazano poniżej, gdzie można wybrać między różnymi dostępnymi szablonami.
Rysunek 2
Szablon NodeTemplate odwołuje się do dowolnego węzła w ścieżce SiteMapPath. Jeśli węzeł jest węzłem głównym lub bieżącym węzłem, a węzeł RootNodeTemplate lub CurrentNodeTemplate jest skonfigurowany, węzeł NodeTemplate jest zastępowany.
Zdarzenia SiteMapPath
Kontrolka SiteMapPath ma dwa zdarzenia, które nie pochodzą z klasy Control; Zdarzenie ItemCreated i ItemDataBound . Zdarzenie ItemCreated jest wywoływane po utworzeniu elementu SiteMapPath. Element ItemDataBound jest wywoływany, gdy metoda DataBind jest wywoływana podczas powiązania danych węzła SiteMapPath. Obiekt SiteMapNodeItemEventArgs zapewnia dostęp do określonego elementu SiteMapNodeItem za pośrednictwem właściwości Item.
Kontrolowanie wyglądu za pomocą obiektu SiteMapPath
Następujące style są dostępne do formatowania kontrolki SiteMapPath.
Nazwa właściwości | Formanty |
---|---|
Currentnodestyle | Określa styl tekstu dla bieżącego węzła. |
Rootnodestyle | Określa styl tekstu dla węzła głównego. |
Nodestyle | Określa styl tekstu dla wszystkich węzłów przy założeniu, że element CurrentNodeStyle lub RootNodeStyle nie ma zastosowania. |
Właściwość NodeStyle jest zastępowana przez element CurrentNodeStyle lub RootNodeStyle. Każda z tych właściwości jest tylko do odczytu i zwraca obiekt Styl . Aby wpłynąć na wygląd węzła przy użyciu jednej z tych właściwości, należy ustawić właściwości zwracanego obiektu Style. Na przykład poniższy kod zmienia właściwość forecolor bieżącego węzła.
<asp:SiteMapPath runat="server" ID="SiteMapPath1"
CurrentNodeStyle-ForeColor="Orange"/>
Właściwość można również zastosować programowo w następujący sposób:
this.SiteMapPath1.CurrentNodeStyle.ForeColor =
System.Drawing.Color.Orange;
Uwaga
Jeśli szablon zostanie zastosowany, styl nie zostanie zastosowany.
Laboratorium 1. Konfigurowanie kontrolki menu ASP.NET
Utwórz nową witrynę sieci Web.
Dodaj plik mapy witryny, wybierając pozycję Plik, Nowy, Plik i wybierając pozycję Mapa witryny z listy szablonów plików.
Otwórz mapę witryny (domyślnie mapę witryny Web.sitemap) i zmodyfikuj ją tak, aby wyglądała jak poniższa lista. Strony, z którymi łączysz się w pliku mapy witryny, tak naprawdę nie istnieją, ale nie będzie to problem w tym ćwiczeniu.
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="~/default.aspx"> <siteMapNode url="~/products/default.aspx" title="Products" description="Our Products"> <siteMapNode url="~/products/winprods.aspx" title="Windows Products" description="Windows Products" /> <siteMapNode url="~/products/webprods.aspx" title="Web Products" description="Web Products" /> </siteMapNode> <siteMapNode url="~/services/default.aspx" title="Services" description="Our Services"> <siteMapNode url="~/services/consulting.aspx" title="Consulting Services" description="Consulting Services" /> <siteMapNode url="~/services/develop.aspx" title="Development Services" description="Development Services" /> </siteMapNode> </siteMapNode> </siteMap>
Otwórz domyślny formularz sieci Web w widoku projektu.
W sekcji Nawigacja przybornika dodaj nową kontrolkę Menu do strony.
W sekcji Dane przybornika dodaj nowy element SiteMapDataSource. Element SiteMapDataSource automatycznie użyje pliku Web.sitemap w witrynie. (Plik Web.sitemap musi znajdować się w folderze głównym witryny).
Kliknij kontrolkę Menu, a następnie kliknij przycisk Tag inteligentny, aby wyświetlić okno dialogowe Zadania menu.
Na liście rozwijanej Wybierz źródło danych wybierz pozycję SiteMapDataSource1.
Kliknij link Autoformatowanie i wybierz format menu.
W okienku Właściwości ustaw właściwość StaticDisplayLevels na 2. Kontrolka Menu powinna teraz wyświetlać węzeł Narzędzia główne, Produkty i usługi w Projektant.
Przejrzyj stronę w przeglądarce, aby użyć menu. (Ponieważ strony dodane do mapy witryny nie istnieją, podczas próby przeglądania będą wyświetlane błędy).
Poeksperymentuj ze zmianą właściwości StaticDisplayLevels i MaximumDynamicDisplayLevels i zobacz, jak wpływają one na sposób renderowania menu.
Laboratorium 2. Dynamiczne powiązanie kontrolki TreeView
W tym ćwiczeniu założono, że uruchomiono lokalnie SQL Server i że baza danych Northwind znajduje się w wystąpieniu SQL Server. Jeśli te warunki nie zostaną spełnione, zmień parametry połączenia w przykładzie. Należy również pamiętać, że może być konieczne określenie SQL Server uwierzytelniania zamiast zaufanego połączenia.
Utwórz nową witrynę sieci Web.
Przejdź do widoku Kod dla pliku Default.aspx i zastąp cały kod poniższym kodem.
<%@ Page Language="C#" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <script runat="server"> void PopulateNode(Object sender, TreeNodeEventArgs e) { // Call the appropriate method to populate a node at a particular level. switch (e.Node.Depth) { case 0: // Populate the first-level nodes. PopulateCategories(e.Node); break; case 1: // Populate the second-level nodes. PopulateProducts(e.Node); break; default: // Do nothing. break; } } void PopulateCategories(TreeNode node) { // Query for the product categories. These are the values // for the second-level nodes. DataSet ResultSet = RunQuery("Select CategoryID, CategoryName From Categories"); // Create the second-level nodes. if (ResultSet.Tables.Count > 0) { // Iterate through and create a new node for each row in the query results. // Notice that the query results are stored in the table of the DataSet. foreach (DataRow row in ResultSet.Tables[0].Rows) { // Create the new node. Notice that the CategoryId is stored in the Value property // of the node. This will make querying for items in a specific category easier when // the third-level nodes are created. TreeNode newNode = new TreeNode(); newNode.Text = row["CategoryName"].ToString(); newNode.Value = row["CategoryID"].ToString(); // Set the PopulateOnDemand property to true so that the child nodes can be // dynamically populated. newNode.PopulateOnDemand = true; // Set additional properties for the node. newNode.SelectAction = TreeNodeSelectAction.Expand; // Add the new node to the ChildNodes collection of the parent node. node.ChildNodes.Add(newNode); } } } void PopulateProducts(TreeNode node) { // Query for the products of the current category. These are the values // for the third-level nodes. DataSet ResultSet = RunQuery("Select ProductName From Products Where CategoryID=" + node.Value); // Create the third-level nodes. if (ResultSet.Tables.Count > 0) { // Iterate through and create a new node for each row in the query results. // Notice that the query results are stored in the table of the DataSet. foreach (DataRow row in ResultSet.Tables[0].Rows) { // Create the new node. TreeNode NewNode = new TreeNode(row["ProductName"].ToString()); // Set the PopulateOnDemand property to false, because these are leaf nodes and // do not need to be populated. NewNode.PopulateOnDemand = false; // Set additional properties for the node. NewNode.SelectAction = TreeNodeSelectAction.None; // Add the new node to the ChildNodes collection of the parent node. node.ChildNodes.Add(NewNode); } } } DataSet RunQuery(String QueryString) { // Declare the connection string. This example uses Microsoft SQL Server // and connects to the Northwind sample database. String ConnectionString = "server=localhost;database=NorthWind;Integrated Security=SSPI"; SqlConnection DBConnection = new SqlConnection(ConnectionString); SqlDataAdapter DBAdapter; DataSet ResultsDataSet = new DataSet(); try { // Run the query and create a DataSet. DBAdapter = new SqlDataAdapter(QueryString, DBConnection); DBAdapter.Fill(ResultsDataSet); // Close the database connection. DBConnection.Close(); } catch (Exception ex) { // Close the database connection if it is still open. if (DBConnection.State == ConnectionState.Open) { DBConnection.Close(); } Message.Text = "Unable to connect to the database."; } return ResultsDataSet; } </script> <html> <body> <form id="Form1" runat="server"> <h3> TreeView PopulateNodesFromClient Example</h3> <asp:TreeView ID="LinksTreeView" Font-Name="Arial" ForeColor="Blue" EnableClientScript="true" PopulateNodesFromClient="false" OnTreeNodePopulate="PopulateNode" runat="server" ExpandDepth="0"> <Nodes> <asp:TreeNode Text="Inventory" SelectAction="Expand" PopulateOnDemand="True" Value="Inventory" /> </Nodes> </asp:TreeView> <br> <br> <asp:Label ID="Message" runat="server" /> </form> </body> </html>
Zapisz stronę jako treeview.aspx.
Przeglądaj stronę.
Po pierwszym wyświetleniu strony wyświetl źródło strony w przeglądarce. Należy pamiętać, że tylko widoczne węzły zostały wysłane do klienta.
Kliknij znak plus obok dowolnego węzła.
Ponownie wyświetl źródło na stronie. Zwróć uwagę, że nowo wyświetlone węzły są teraz obecne.
Laboratorium 3: Wyświetlanie szczegółów i edytowanie danych przy użyciu kontrolki GridView i DetailsView
Utwórz nową witrynę sieci Web.
Dodaj nowy web.config do witryny sieci Web.
Dodaj parametry połączenia do pliku web.config, jak pokazano poniżej:
<connectionStrings> <add name="Northwind" providerName="System.Data.SqlClient" connectionString="Data Source=localhost;Integrated Security=SSPI; Initial Catalog=Northwind;"/> </connectionStrings>
Uwaga
Może być konieczne zmianę parametrów połączenia w zależności od środowiska.
Zapisz i zamknij plik web.config.
Otwórz plik Default.aspx i dodaj nową kontrolkę SqlDataSource.
Zmień identyfikator kontrolki SqlDataSource na Products.
W menu Zadania sqlDataSource kliknij pozycję Konfiguruj źródło danych.
Wybierz pozycję Northwind na liście rozwijanej połączenia, a następnie kliknij przycisk Dalej.
Wybierz pozycję Produkty z listy rozwijanej Nazwa i zaznacz pola wyboru ProductID, ProductName, UnitPrice i UnitsInStock , jak pokazano poniżej.
Rysunek 3
- Kliknij przycisk Dalej.
- Kliknij przycisk Finish (Zakończ).
- Przejdź do widoku Źródło i sprawdź wygenerowany kod. Zwróć uwagę na kontrolkę SelectCommand, DeleteCommand, InsertCommand i UpdateCommand , które zostały dodane do kontrolki SqlDataSource. Zwróć również uwagę na dodane parametry.
- Przejdź do widoku Projektu i dodaj nową kontrolkę GridView do strony.
- Wybierz pozycję Produkty z listy rozwijanej Wybierz źródło danych .
- Zaznacz pole wyboru Włącz stronicowanie i Włącz zaznaczenie , jak pokazano poniżej.
Rysunek 4
- Kliknij link Edytuj kolumny i upewnij się, że zaznaczono pole Generowanie automatyczne .
- Kliknij przycisk OK.
- Po wybraniu kontrolki GridView kliknij przycisk obok właściwości DataKeyNames w okienku Właściwości.
- Wybierz pozycję ProductID z listy Dostępne pola danych i kliknij przycisk , > aby go dodać.
- Kliknij przycisk OK.
- Dodaj nową kontrolkę SqlDataSource do strony.
- Zmień identyfikator kontrolki SqlDataSource na Details.
- Z menu Zadania sqlDataSource wybierz pozycję Konfiguruj źródło danych.
- Wybierz pozycję Northwind z listy rozwijanej, a następnie kliknij przycisk Dalej.
- Wybierz pozycję Produkty z listy rozwijanej Nazwa i zaznacz <pole wyboru /strong>* w polu listy Kolumny .
- Kliknij przycisk WHERE (GDZIE ).
- Wybierz pozycję ProductID z listy rozwijanej Kolumna .
- Wybierz = pozycję na liście rozwijanej Operator.
- Wybierz pozycję Kontrola z listy rozwijanej Źródło .
- Wybierz pozycję GridView1 z listy rozwijanej Identyfikator kontrolki .
- Kliknij przycisk Dodaj , aby dodać klauzulę WHERE.
- Kliknij przycisk OK.
- Kliknij przycisk Zaawansowane i zaznacz pole wyboru Generuj instrukcje INSERT, UPDATE i DELETE .
- Kliknij przycisk OK.
- Kliknij przycisk Dalej i kliknij przycisk Zakończ.
- Dodaj kontrolkę DetailsView do strony.
- Na liście rozwijanej Wybierz źródło danych wybierz pozycję Szczegóły.
- Zaznacz pole wyboru Włącz edytowanie , jak pokazano poniżej.
Rysunek 5 39. Zapisz stronę i przeglądaj plik Default.aspx. 40. Kliknij link Wybierz obok różnych rekordów, aby automatycznie wyświetlić aktualizację Widoku szczegółów. 41. Kliknij link Edytuj w kontrolce DetailsView. 42. Wprowadź zmianę w rekordzie i kliknij przycisk Aktualizuj.