Deklarované parametry (C#)
Scott Mitchell
V tomto kurzu si ukážeme, jak pomocí parametru nastaveného na pevně zakódovanou hodnotu vybrat data, která se mají zobrazit v ovládacím prvku DetailsView.
Úvod
V posledním kurzu jsme se podívali na zobrazení dat pomocí Ovládací prvky GridView, DetailsView a FormView vázané na ObjectDataSource ovládací prvek, který vyvolal metodu GetProducts()
ProductsBLL
z třídy. Metoda GetProducts()
vrátí tabulku DataTable silného typu naplněnou všemi záznamy z tabulky databáze Products
Northwind. Třída ProductsBLL
obsahuje další metody pro vrácení pouze podmnožina produktů - GetProductByProductID(productID)
, GetProductsByCategoryID(categoryID)
a GetProductsBySupplierID(supplierID)
. Tyto tři metody očekávají vstupní parametr označující, jak filtrovat vrácené informace o produktu.
ObjectDataSource lze použít k vyvolání metod, které očekávají vstupní parametry, ale abychom to mohli udělat, musíme určit, odkud hodnoty pro tyto parametry pocházejí. Hodnoty parametrů můžou být pevně zakódované nebo můžou pocházet z různých dynamických zdrojů, včetně hodnot řetězce dotazu, proměnných relace, hodnoty vlastnosti webového ovládacího prvku na stránce nebo jiných.
Pro účely tohoto kurzu si začněme znázorněním použití parametru nastaveného na pevně zakódovanou hodnotu. Konkrétně se podíváme na přidání DetailsView na stránku, která zobrazuje informace o konkrétním produktu, konkrétně Chef Anton's Gumbo Mix, který má ProductID
5. Dále uvidíme, jak nastavit hodnotu parametru na základě webového ovládacího prvku. Konkrétně pomocí textového pole necháme uživatele zadat zemi nebo oblast, po které může kliknout na tlačítko a zobrazit seznam dodavatelů, kteří se nacházejí v dané zemi nebo oblasti.
Použití pevně zakódované hodnoty parametru
V prvním příkladu začněte přidáním ovládacího prvku DetailsView na DeclarativeParams.aspx
stránku ve BasicReporting
složce. Z inteligentní značky DetailsView vyberte <v rozevíracím seznamu nový zdroj> dat a zvolte přidání ObjectDataSource.
Obrázek 1: Přidání objektu ObjectDataSource na stránku (kliknutím zobrazíte obrázek v plné velikosti)
Tím se automaticky spustí průvodce Zvolit zdroj dat ovládacího prvku ObjectDataSource. ProductsBLL
Vyberte třídu z první obrazovky průvodce.
Obrázek 2: Výběr ProductsBLL
třídy (kliknutím zobrazíte obrázek v plné velikosti)
Vzhledem k tomu, že chceme zobrazit informace o konkrétním produktu, chceme tuto metodu GetProductByProductID(productID)
použít.
Obrázek 3: Zvolte metodu GetProductByProductID(productID)
(kliknutím zobrazíte obrázek s plnou velikostí)
Vzhledem k tomu, že metoda, kterou jsme vybrali, obsahuje parametr, existuje ještě jedna obrazovka průvodce, kde jsme byli požádáni o definování hodnoty, která se má pro parametr použít. V seznamu vlevo jsou uvedeny všechny parametry pro vybranou metodu. Pro GetProductByProductID(productID)
tam je jen jeden productID
. Na pravé straně můžeme zadat hodnotu pro vybraný parametr. Rozevírací seznam zdroje parametrů obsahuje výčet různých možných zdrojů pro hodnotu parametru. Vzhledem k tomu, že chceme pro parametr zadat pevně zakódovanou hodnotu 5 productID
, ponechte zdroj parametru jako None a do textového pole DefaultValue zadejte hodnotu 5.
Obrázek 4: Pro parametr se použije pevně zakódovaná hodnota parametru productID
5 (kliknutím zobrazíte obrázek s plnou velikostí).
Po dokončení Průvodce konfigurací zdroje dat obsahuje Parameter
deklarativní kód ovládacího prvku ObjectDataSource objekt v SelectParameters
kolekci pro každý ze vstupních parametrů očekávaný metodou definovanou ve SelectMethod
vlastnosti. Vzhledem k tomu, že metoda, kterou v tomto příkladu používáme, očekává pouze jeden vstupní parametr, parameterID
je zde pouze jedna položka. Kolekce SelectParameters
může obsahovat libovolnou třídu, která je odvozena z Parameter
třídy v System.Web.UI.WebControls
oboru názvů. U pevně zakódovaných hodnot parametrů se používá základní Parameter
třída, ale pro ostatní možnosti zdroje parametrů se používá odvozená Parameter
třída. V případě potřeby můžete také vytvořit vlastní typy parametrů.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
<SelectParameters>
<asp:Parameter DefaultValue="5" Name="productID"
Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Poznámka:
Pokud sledujete na svém vlastním počítači deklarativní kód, který vidíte v tomto okamžiku, může obsahovat hodnoty pro InsertMethod
, UpdateMethod
a DeleteMethod
vlastnosti a také DeleteParameters
. Průvodce Zvolit zdroj dat ObjectDataSource automaticky určuje metody, které ProductBLL
se mají použít pro vkládání, aktualizaci a odstraňování, takže pokud jste je explicitně nevymazali, budou zahrnuty do výše uvedených značek.
Při návštěvě této stránky vyvolá ovládací prvek web dat metodu ObjectDataSource Select
, která zavolá metodu ProductsBLL
třídy GetProductByProductID(productID)
pomocí pevně zakódované hodnoty 5 pro productID
vstupní parametr. Metoda vrátí objekt silného typu ProductDataTable
, který obsahuje jeden řádek s informacemi o Chef Anton's Gumbo Mix (produkt s ProductID
5).
Obrázek 5: Zobrazí se informace o mixu Gumbo Chef Antona (kliknutím zobrazíte obrázek v plné velikosti).
Nastavení hodnoty parametru na hodnotu vlastnosti webového ovládacího prvku
Hodnoty parametrů ObjectDataSource lze také nastavit na základě hodnoty webového ovládacího prvku na stránce. Abychom to mohli ilustrovat, pojďme mít GridView se seznamem všech dodavatelů umístěných v zemi nebo oblasti určené uživatelem. Chcete-li toho dosáhnout, přidejte TextBox na stránku, do které může uživatel zadat název země nebo země. Nastavte vlastnost ovládacího prvku ID
TextBox na CountryName
hodnotu . Přidejte také ovládací prvek Web Button.
Obrázek 6: Přidání textového pole na stránku s ID
CountryName
(kliknutím zobrazíte obrázek v plné velikosti)
Dále na stránku přidejte Objekt GridView a z inteligentní značky zvolte, že chcete přidat nový ObjectDataSource. Vzhledem k tomu, že chceme zobrazit informace o dodavateli, vyberte SuppliersBLL
třídu z první obrazovky průvodce. Na druhé obrazovce vyberte metodu GetSuppliersByCountry(country)
.
Obrázek 7: Volba GetSuppliersByCountry(country)
metody (kliknutím zobrazíte obrázek v plné velikosti)
Vzhledem k tomu, že GetSuppliersByCountry(country)
metoda má vstupní parametr, průvodce znovu obsahuje konečnou obrazovku pro výběr hodnoty parametru. Tentokrát nastavte zdroj parametru na Ovládací prvek. Tím se naplní rozevírací seznam ControlID názvy ovládacích prvků na stránce; CountryName
vyberte ovládací prvek ze seznamu. Při prvním navštívení CountryName
stránky bude Textové pole prázdné, takže se nevrátí žádné výsledky a nezobrazí se nic. Pokud chcete ve výchozím nastavení zobrazit některé výsledky, nastavte odpovídajícím způsobem textové pole DefaultValue.
Obrázek 8: Nastavení hodnoty parametru CountryName
na hodnotu ovládacího prvku (kliknutím zobrazíte obrázek s plnou velikostí)
Deklarativní kód ObjectDataSource se mírně liší od našeho prvního příkladu pomocí ControlParameter místo standardního Parameter
objektu. A ControlParameter
má další vlastnosti pro zadání ID
webového ovládacího prvku a hodnoty vlastnosti, které se mají použít pro parametr (PropertyName
). Průvodce konfigurací zdroje dat byl dostatečně inteligentní, abychom zjistili, že pro TextBox budeme pravděpodobně chtít použít Text
vlastnost pro hodnotu parametru. Chcete-li však použít jinou hodnotu vlastnosti z webového ovládacího prvku, můžete změnit PropertyName
hodnotu zde nebo kliknutím na odkaz Zobrazit upřesňující vlastnosti v průvodci.
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
<SelectParameters>
<asp:ControlParameter ControlID="CountryName"
Name="country" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
Při první CountryName
návštěvě stránky TextBox je prázdné. Metoda ObjectDataSource Select
je stále vyvolána GridView, ale hodnota null
je předána do GetSuppliersByCountry(country)
metody. TableAdapter převede null
hodnotu databáze NULL
(DBNull.Value
), ale dotaz použitý GetSuppliersByCountry(country)
metodou je zapsán tak, že nevrací žádné hodnoty při NULL
zadání hodnoty parametru @CategoryID
. Stručně řečeno, nejsou vráceni žádní dodavatelé.
Jakmile však návštěvník vstoupí do země a klikne na tlačítko Zobrazit dodavatele, aby způsobil postback, metoda ObjectDataSource Select
je znovu dotazována a předává hodnotu ovládacího prvku Text
TextBox jako country
parametr.
Obrázek 9: Tito dodavatelé z Kanady jsou zobrazeni (kliknutím zobrazíte obrázek s plnou velikostí)
Zobrazení všech dodavatelů ve výchozím nastavení
Místo toho, aby se při prvním zobrazení stránky zobrazovala žádná z dodavatelů, mohli bychom nejprve zobrazit všechny dodavatele, což uživateli umožní analyzovat seznam zadáním názvu země/oblasti do textového pole. Pokud je TextBox prázdný, SuppliersBLL
metoda třídy GetSuppliersByCountry(country)
je předána v hodnotě null
pro jeho country
vstupní parametr. Tato null
hodnota se pak předá do metody DAL GetSupplierByCountry(country)
, kde se přeloží na hodnotu databáze NULL
parametru @Country
v následujícím dotazu:
SELECT SupplierID, CompanyName, Address, City, Country, Phone
FROM Suppliers
WHERE Country = @Country
Výraz Country = NULL
vždy vrátí hodnotu False, a to i u záznamů, jejichž Country
sloupec má NULL
hodnotu, a proto se nevrátí žádné záznamy.
Abychom vrátili všechny dodavatele, pokud je země TextBox prázdná, můžeme metodu v BLL rozšířit GetSuppliersByCountry(country)
tak, aby volala GetSuppliers()
metodu, pokud je null
její země parametrem a jinak volala metodu GetSuppliersByCountry(country)
DAL. To bude mít vliv na vrácení všech dodavatelů, pokud není zadána žádná země, a příslušnou podmnožinu dodavatelů, pokud je zahrnut parametr země.
Změňte metodu GetSuppliersByCountry(country)
SuppliersBLL
ve třídě na následující:
public Northwind.SuppliersDataTable GetSuppliersByCountry(string country)
{
if (string.IsNullOrEmpty(country))
return GetSuppliers();
else
return Adapter.GetSuppliersByCountry(country);
}
Při této změně se na DeclarativeParams.aspx
stránce zobrazí všichni dodavatelé při prvním návštěvě (nebo kdykoli CountryName
je textové pole prázdné).
Obrázek 10: Ve výchozím nastavení se zobrazují všichni dodavatelé (kliknutím zobrazíte obrázek v plné velikosti).
Shrnutí
Abychom mohli používat metody se vstupními parametry, musíme zadat hodnoty parametrů v kolekci ObjectDataSource SelectParameters
. Různé typy parametrů umožňují získat hodnotu parametru z různých zdrojů. Výchozí typ parametru používá pevně zakódovanou hodnotu, ale stejně snadno (a bez řádku kódu) hodnoty parametrů lze získat z řetězce dotazu, proměnných relace, souborů cookie a dokonce i uživatelem zadaných hodnot z webových ovládacích prvků na stránce.
Příklady, na které jsme se podívali v tomto kurzu, jsme si ukázali, jak používat deklarativní hodnoty parametrů. Někdy ale může docházet k tomu, že potřebujeme použít zdroj parametrů, který není dostupný, například aktuální datum a čas, nebo pokud náš web používal členství, ID uživatele návštěvníka. V takových scénářích můžeme hodnoty parametrů nastavit programově před ObjectDataSource vyvoláním jeho metody základního objektu. V dalším kurzu se dozvíme, jak toho dosáhnout.
Šťastné programování!
O autorovi
Scott Mitchell, autor sedmi knih ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, trenér a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 za 24 hodin. Je dostupný na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím svého blogu, který lze najít na http://ScottOnWriting.NET.
Zvláštní díky
Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Vedoucí recenzent pro tento kurz byl Hilton Giesenow. Chcete si projít nadcházející články MSDN? Pokud ano, zahoďte mi řádek na mitchell@4GuysFromRolla.com.