Parametry deklaratywne (C#)
Autor : Scott Mitchell
W tym samouczku zilustrujemy sposób użycia parametru ustawionego na wartość zakodowaną w celu wybrania danych do wyświetlenia w kontrolce DetailsView.
Wprowadzenie
W ostatnim samouczku przyjrzeliśmy się wyświetlaniu danych za pomocą kontrolek GridView, DetailsView i FormView powiązanych z kontrolką ObjectDataSource, która wywołała metodę GetProducts()
z ProductsBLL
klasy . Metoda GetProducts()
zwraca silnie typizowana tabelę DataTable wypełniona wszystkimi rekordami z tabeli bazy danych Products
Northwind. Klasa ProductsBLL
zawiera dodatkowe metody zwracania tylko podzestawów produktów — GetProductByProductID(productID)
, GetProductsByCategoryID(categoryID)
, i GetProductsBySupplierID(supplierID)
. Te trzy metody oczekują parametru wejściowego wskazującego sposób filtrowania zwróconych informacji o produkcie.
Obiekt ObjectDataSource może służyć do wywoływania metod, które oczekują parametrów wejściowych, ale w tym celu musimy określić, skąd pochodzą wartości tych parametrów. Wartości parametrów mogą być zakodowane w kodzie lub mogą pochodzić z różnych źródeł dynamicznych, takich jak: wartości ciągu zapytania, zmienne sesji, wartość właściwości kontrolki sieci Web na stronie lub inne.
Na potrzeby tego samouczka zacznijmy od zilustrowania sposobu użycia parametru ustawionego na wartość zakodowaną. W szczególności przyjrzymy się dodaniu kontrolki DetailsView do strony, która wyświetla informacje o konkretnym produkcie, a mianowicie Gumbo Mix chef Antona, który ma ProductID
wartość 5. Następnie zobaczymy, jak ustawić wartość parametru na podstawie kontrolki sieci Web. W szczególności użyjemy kontrolki TextBox, aby umożliwić użytkownikowi wpisanie w kraju/regionie, po którym można kliknąć przycisk, aby wyświetlić listę dostawców, którzy znajdują się w tym kraju/regionie.
Używanie wartości parametru Hard-Coded
W pierwszym przykładzie zacznij od dodania kontrolki DetailsView do DeclarativeParams.aspx
strony w folderze BasicReporting
. Z tagu inteligentnego kontrolki DetailsView wybierz pozycję <Nowe źródło> danych z listy rozwijanej i wybierz pozycję Dodaj obiekt ObjectDataSource.
Rysunek 1. Dodawanie obiektu ObjectDataSource do strony (kliknij, aby wyświetlić obraz o pełnym rozmiarze)
Spowoduje to automatyczne uruchomienie kreatora wybierania źródła danych kontrolki ObjectDataSource. Wybierz klasę ProductsBLL
z pierwszego ekranu kreatora.
Rysunek 2. Wybieranie ProductsBLL
klasy (kliknij, aby wyświetlić obraz pełnowymiarowy)
Ponieważ chcemy wyświetlić informacje o konkretnym produkcie, chcemy użyć GetProductByProductID(productID)
metody .
Rysunek 3. Wybieranie GetProductByProductID(productID)
metody (kliknij, aby wyświetlić obraz pełnowymiarowy)
Ponieważ wybrana metoda zawiera parametr, jest jeszcze jeden ekran kreatora, na którym zostanie wyświetlony monit o zdefiniowanie wartości, która ma być używana dla parametru. Lista po lewej stronie zawiera wszystkie parametry wybranej metody. W przypadku GetProductByProductID(productID)
jednego pliku jest tylko jeden productID
obiekt . Po prawej stronie możemy określić wartość wybranego parametru. Lista rozwijana źródła parametrów wylicza różne możliwe źródła dla wartości parametru. Ponieważ chcemy określić zakodowaną wartość 5 dla parametru productID
, pozostaw wartość Źródło parametru jako Brak i wprowadź wartość 5 w polu tekstowym DefaultValue.
Rysunek 4. Wartość parametru Hard-Coded 5 będzie używana dla parametru productID
(kliknij, aby wyświetlić obraz w pełnym rozmiarze)
Po ukończeniu pracy kreatora Konfigurowanie źródła danych znacznik deklaratywny kontrolki ObjectDataSource zawiera Parameter
obiekt w SelectParameters
kolekcji dla każdego parametru wejściowego oczekiwanego przez metodę zdefiniowaną SelectMethod
we właściwości . Ponieważ metoda, która jest używana w tym przykładzie, oczekuje tylko jednego parametru wejściowego, parameterID
tutaj znajduje się tylko jeden wpis. Kolekcja SelectParameters
może zawierać dowolną klasę pochodzącą Parameter
z klasy w System.Web.UI.WebControls
przestrzeni nazw. W przypadku zakodowanych na podstawie wartości parametrów używana jest klasa bazowa Parameter
, ale w przypadku innych opcji źródła parametrów jest używana klasa pochodna Parameter
. W razie potrzeby można również utworzyć własne niestandardowe typy parametrów.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
<SelectParameters>
<asp:Parameter DefaultValue="5" Name="productID"
Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Uwaga
Jeśli obserwujesz na własnym komputerze znaczniki deklaratywne, które widzisz w tym momencie, mogą zawierać wartości właściwości InsertMethod
, UpdateMethod
i DeleteMethod
, a także DeleteParameters
. Kreator wyboru źródła danych ObjectDataSource automatycznie określa metody z ProductBLL
elementu do użycia do wstawiania, aktualizowania i usuwania, więc jeśli jawnie te nie zostały wyczyszczone, zostaną one uwzględnione w narzucie powyżej.
Podczas odwiedzania tej strony kontrolka internetowa danych wywoła metodę ObjectDataSource Select
, która wywoła ProductsBLL
metodę klasy GetProductByProductID(productID)
przy użyciu zakodowanej wartości 5 dla parametru wejściowego productID
. Metoda zwróci silnie typizowanego ProductDataTable
obiektu, który zawiera jeden wiersz z informacjami o gumbo mix chef Anton (produkt z ProductID
5).
Rysunek 5. Wyświetlane są informacje o mixie Gumbo Chef Antona (kliknij, aby wyświetlić obraz w pełnym rozmiarze)
Ustawianie wartości parametru na wartość właściwości kontrolki sieci Web
Wartości parametrów obiektu ObjectDataSource można również ustawić na podstawie wartości kontrolki sieci Web na stronie. Aby to zilustrować, użyjmy kontrolki GridView, która wyświetla listę wszystkich dostawców znajdujących się w kraju/regionie określonym przez użytkownika. Aby to osiągnąć, dodaj pole TextBox do strony, do której użytkownik może wprowadzić nazwę kraju/kraju. Ustaw właściwość tej kontrolki ID
TextBox na CountryName
wartość . Dodaj również kontrolkę Sieć Web przycisku.
Rysunek 6. Dodawanie kontrolki TextBox do strony za pomocą polecenia ID
CountryName
(kliknij, aby wyświetlić obraz o pełnym rozmiarze)
Następnie dodaj element GridView do strony, a następnie z tagu inteligentnego wybierz opcję dodania nowego obiektu ObjectDataSource. Ponieważ chcemy wyświetlić informacje o dostawcy, wybierz klasę SuppliersBLL
z pierwszego ekranu kreatora. Z drugiego ekranu wybierz metodę GetSuppliersByCountry(country)
.
Rysunek 7. Wybieranie GetSuppliersByCountry(country)
metody (kliknij, aby wyświetlić obraz pełnowymiarowy)
GetSuppliersByCountry(country)
Ponieważ metoda ma parametr wejściowy, kreator po raz kolejny zawiera ekran końcowy do wybierania wartości parametru. Tym razem ustaw źródło parametru na Wartość Control. Spowoduje to wypełnienie listy rozwijanej ControlID nazwami kontrolek na stronie; wybierz kontrolkę CountryName
z listy. Gdy strona zostanie po raz pierwszy odwiedzona, CountryName
pole TextBox będzie puste, więc żadne wyniki nie zostaną zwrócone i nic nie zostanie wyświetlone. Jeśli chcesz domyślnie wyświetlić niektóre wyniki, ustaw odpowiednio pole tekstowe DefaultValue.
Rysunek 8. Ustawianie wartości parametru na wartość kontrolki CountryName
(kliknij, aby wyświetlić obraz pełnowymiarowy)
Znacznik deklaratywny objectDataSource różni się nieznacznie od naszego pierwszego przykładu, używając parametru ControlParameter zamiast obiektu standardowego Parameter
. Obiekt ControlParameter
ma dodatkowe właściwości do określenia ID
kontrolki Sieci Web i wartości właściwości do użycia dla parametru (PropertyName
). Kreator konfigurowania źródła danych był wystarczająco inteligentny, aby określić, że w przypadku kontrolki TextBox prawdopodobnie użyjemy Text
właściwości dla wartości parametru. Jeśli jednak chcesz użyć innej wartości właściwości z kontrolki Sieci Web, możesz zmienić PropertyName
wartość w tym miejscu lub klikając link "Pokaż właściwości zaawansowane" w kreatorze.
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
<SelectParameters>
<asp:ControlParameter ControlID="CountryName"
Name="country" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
Podczas odwiedzania strony po raz pierwszy CountryName
pole TextBox jest puste. Metoda ObjectDataSource Select
jest nadal wywoływana przez obiekt GridView, ale wartość null
jest przekazywana do GetSuppliersByCountry(country)
metody . TableAdapter konwertuje null
wartość na wartość bazy danych NULL
(DBNull.Value
), ale zapytanie używane przez GetSuppliersByCountry(country)
metodę jest zapisywane w taki sposób, że nie zwraca żadnych wartości, gdy NULL
wartość jest określona dla parametru @CategoryID
. Krótko mówiąc, nie są zwracani żadni dostawcy.
Gdy jednak odwiedzający wejdzie do kraju i kliknie przycisk Pokaż dostawców, aby spowodować powrót, metoda ObjectDataSource Select
zostanie ponownie wyświetlona, przekazując wartość kontrolki Text
TextBox jako country
parametr.
Rysunek 9. Ci dostawcy z Kanady są wyświetlani (kliknij, aby wyświetlić obraz pełnowymiarowy)
Wyświetlanie domyślnie wszystkich dostawców
Zamiast pokazywać żadnego z dostawców podczas pierwszego wyświetlania strony, na początku możemy chcieć pokazać wszystkich dostawców, umożliwiając użytkownikowi przeanalizowanie listy przez wprowadzenie nazwy kraju/regionu w polu tekstowym. Gdy pole TextBox jest puste, SuppliersBLL
metoda klasy jest przekazywana GetSuppliersByCountry(country)
w wartości parametru country
wejściowegonull
. Ta null
wartość jest następnie przekazywana do metody dal GetSupplierByCountry(country)
, gdzie jest tłumaczona na wartość bazy danych NULL
dla parametru @Country
w następującym zapytaniu:
SELECT SupplierID, CompanyName, Address, City, Country, Phone
FROM Suppliers
WHERE Country = @Country
Wyrażenie Country = NULL
zawsze zwraca wartość False, nawet w przypadku rekordów, których Country
kolumna ma NULL
wartość, dlatego nie są zwracane żadne rekordy.
Aby zwrócić wszystkich dostawców, gdy pole TextBox kraju jest puste, możemy rozszerzyć GetSuppliersByCountry(country)
metodę w BLL, aby wywołać GetSuppliers()
metodę, gdy jej parametr kraju to null
i wywołać metodę DAL GetSuppliersByCountry(country)
w przeciwnym razie. Będzie to miało wpływ na zwrócenie wszystkich dostawców, gdy żaden kraj nie zostanie określony, oraz odpowiedni podzbiór dostawców, gdy zostanie uwzględniony parametr kraju.
Zmień metodę GetSuppliersByCountry(country)
SuppliersBLL
w klasie na następującą:
public Northwind.SuppliersDataTable GetSuppliersByCountry(string country)
{
if (string.IsNullOrEmpty(country))
return GetSuppliers();
else
return Adapter.GetSuppliersByCountry(country);
}
Dzięki tej zmianie DeclarativeParams.aspx
strona pokazuje wszystkich dostawców po raz pierwszy odwiedzony (lub za każdym razem, CountryName
gdy pole TextBox jest puste).
Rysunek 10. Wszyscy dostawcy są teraz domyślnie wyświetlani (kliknij, aby wyświetlić obraz pełnowymiarowy)
Podsumowanie
Aby używać metod z parametrami wejściowymi, musimy określić wartości parametrów w kolekcji ObjectDataSource SelectParameters
. Różne typy parametrów umożliwiają uzyskanie wartości parametru z różnych źródeł. Domyślny typ parametru używa zakodowanej wartości, ale równie łatwo (i bez wiersza kodu) wartości parametrów można uzyskać z zapytań, zmiennych sesji, plików cookie, a nawet wartości wprowadzonych przez użytkownika z kontrolek sieci Web na stronie.
W przykładach omówionych w tym samouczku pokazano, jak używać wartości parametrów deklaratywnych. Jednak czasami może być konieczne użycie źródła parametrów, które jest niedostępne, takie jak bieżąca data i godzina, lub, jeśli nasza witryna używa członkostwa, identyfikator użytkownika odwiedzających. W takich scenariuszach możemy ustawić wartości parametrów programowo przed wywołaniem metody obiektu źródłowego przez obiekt ObjectDataSource. Zobaczymy, jak to zrobić w następnym samouczku.
Szczęśliwe programowanie!
Informacje o autorze
Scott Mitchell, autor siedmiu książek ASP/ASP.NET i założyciel 4GuysFromRolla.com, współpracuje z technologiami internetowymi firmy Microsoft od 1998 roku. Scott pracuje jako niezależny konsultant, trener i pisarz. Jego najnowsza książka to Sams Teach Yourself ASP.NET 2.0 w ciągu 24 godzin. Można do niego dotrzeć pod adresem mitchell@4GuysFromRolla.com. Lub za pośrednictwem swojego bloga, który można znaleźć na stronie http://ScottOnWriting.NET.
Specjalne podziękowania
Ta seria samouczków została przejrzyona przez wielu przydatnych recenzentów. Głównym recenzentem tego samouczka był Hilton Giesenow. Chcesz przejrzeć nadchodzące artykuły MSDN? Jeśli tak, upuść mi wiersz pod adresemmitchell@4GuysFromRolla.com .
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla