Sdílet prostřednictvím


Deklarované parametry (C#)

Scott Mitchell

Stáhnout PDF

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.

Přidání ObjectDataSource na stránku

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.

Výběr třídy ProductsBLL

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.

Volba metody GetProductByProductID(productID)

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.

Pro parametr ProductID se použije pevně zakódovaná hodnota parametru 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, parameterIDje 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, UpdateMethoda 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).

Zobrazí se informace o Chef Anton's Gumbo Mix

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 CountryNamehodnotu . Přidejte také ovládací prvek Web Button.

Přidání textového pole na stránku s ID CountryName

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) .

Choose the GetSuppliersByCountry(country) – metoda

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.

Nastavení hodnoty parametru na hodnotu ovládacího prvku CountryName

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.

Tyto dodavatele z Kanady jsou zobrazeny.

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é).

Všichni dodavatelé se teď ve výchozím nastavení zobrazují

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.