Deklarované parametry (VB)

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í GridView, DetailsView a FormView ovládací prvky vázané na ObjectDataSource ovládací prvek, který vyvolal metodu GetProducts() z ProductsBLL 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 určující, jak filtrovat vrácené informace o produktu.

ObjectDataSource lze použít k vyvolání metod, které očekávají vstupní parametry, ale k tomu musíme zadat, odkud hodnoty těchto parametrů pocházejí. Hodnoty parametrů mohou být pevně zakódované nebo mohou 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 začneme ilustrací toho, jak použít sadu parametrů 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ě Gumbo Mix chefa Antona, který má ProductID 5. Dále se podíváme, jak nastavit hodnotu parametru na základě webového ovládacího prvku. Konkrétně použijeme textové pole k tomu, aby uživatel mohl zadat zemi nebo oblast, po které může kliknutím na tlačítko zobrazit seznam dodavatelů, kteří se nacházejí v dané zemi nebo oblasti.

Použití Hard-Coded 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í objektu 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 Na první obrazovce průvodce vyberte třídu .

Vyberte třídu 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 použít metodu GetProductByProductID(productID) .

Zvolte metodu GetProductByProductID(productID).

Obrázek 3: Volba GetProductByProductID(productID) metody (kliknutím zobrazíte obrázek v plné velikosti)

Vzhledem k tomu, že metoda, kterou jsme vybrali, obsahuje parametr, existuje ještě jedna obrazovka průvodce, kde se zobrazí výzva k definování hodnoty, která se má pro parametr použít. Seznam na levé straně zobrazuje všechny parametry pro vybranou metodu. Protože GetProductByProductID(productID) existuje jen jeden productID. Na pravé straně můžeme zadat hodnotu vybraného parametru. Rozevírací seznam zdroj parametrů uvádí různé možné zdroje pro hodnotu parametru. Vzhledem k tomu, že chceme pro parametr zadat pevně zakódovanou hodnotu 5 productID , ponechte zdroj parametru None a do textového pole DefaultValue zadejte hodnotu 5.

Pro parametr productID se použije Hard-Coded hodnota parametru 5.

Obrázek 4: Pro parametr se použije Hard-Coded hodnota parametru productID 5 (kliknutím zobrazíte obrázek v plné velikosti)

Po dokončení průvodce Konfigurovat zdroj dat obsahuje deklarativní značky Parameter ovládacího prvku ObjectDataSource objekt v SelectParameters kolekci pro každý vstupní parametr očekávaný metodou definovanou ve SelectMethod vlastnosti . Vzhledem k tomu, že metoda, která používáme v tomto příkladu, parameterIDočekává pouze jeden vstupní parametr , 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ů . Pro pevně zakódované hodnoty 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 postupujete na vlastním počítači, může deklarativní kód, který se zobrazí v tomto okamžiku InsertMethod, obsahovat hodnoty vlastností , UpdateMethoda DeleteMethod a také DeleteParameters. Průvodce Zvolit zdroj dat v objektu ObjectDataSource automaticky určuje metody z objektu ProductBLL , které se mají použít pro vložení, aktualizaci a odstranění, takže pokud jste je explicitně nevymazali, budou zahrnuty ve výše uvedeném kódu.

Při návštěvě této stránky datový web ovládací prvek vyvolá ObjectDataSource Select metodu, která bude volat 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 Gumbo Mixu Chefa Antona (produkt s ProductID hodnotou 5).

Zobrazí se informace o Gumbo Mixu chefa Antona

Obrázek 5: Zobrazí se informace o Gumbo Mixu chefa 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 ilustrovali, dáme si GridView, který obsahuje seznam všech dodavatelů, kteří se nacházejí v zemi určené uživatelem. Začněte přidáním textového pole na stránku, do které uživatel může zadat název země. Nastavte vlastnost tohoto ovládacího prvku ID TextBox na CountryName. Přidejte také webový ovládací prvek Tlačítko.

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

Obrázek 6: Přidání textového pole na stránku pomocí IDCountryName příkazu (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, SuppliersBLL vyberte třídu z první obrazovky průvodce. Na druhé obrazovce vyberte metodu GetSuppliersByCountry(country) .

Zvolte 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 poslední 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í návštěvě CountryName stránky bude textové pole prázdné, takže se nevrátí žádné výsledky a nic se nezobrazí. Pokud chcete ve výchozím nastavení zobrazit některé výsledky, nastavte odpovídajícím způsobem textové pole DefaultValue.

Nastavte hodnotu 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 v plné velikosti)

Deklarativní kód ObjectDataSource se mírně liší od našeho prvního příkladu pomocí ControlParameter místo standardního Parameter objektu. Objekt ControlParameter má další vlastnosti pro určení ID ovládacího prvku Web a hodnoty vlastnosti, které se mají použít pro parametr (PropertyName). Průvodce konfigurovat zdroj dat byl dostatečně inteligentní, aby zjistil, že pro TextBox budeme pravděpodobně chtít použít Text vlastnost pro hodnotu parametru. Pokud však chcete 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 rozšířené 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 je textové pole prázdné. Metoda ObjectDataSource Select je stále vyvolána GridView, ale hodnota Nothing je předána GetSuppliersByCountry(country) do metody. TableAdapter převede Nothing hodnotu na hodnotu databáze NULL (DBNull.Value), ale dotaz použitý metodou GetSuppliersByCountry(country) se zapíše tak, aby při zadání hodnoty pro @CategoryID parametr nevrací žádné hodnotyNULL. Stručně řečeno, nevrátí se žádní dodavatelé.

Jakmile návštěvník vstoupí do země nebo oblasti a kliknutím na tlačítko Zobrazit dodavatele způsobí zpětné odeslání, metoda ObjectDataSource Select se znovu dotazuje a předá hodnotu ovládacího prvku Text TextBox jako country parametr.

Tito dodavatelé z Kanady jsou zobrazeni

Obrázek 9: Zobrazí se dodavatelé z Kanady (kliknutím zobrazíte obrázek v plné velikosti)

Ve výchozím nastavení se zobrazují všichni dodavatelé.

Místo toho, aby se při prvním zobrazení stránky nezobrazit žádný z dodavatelů, můžeme chtít nejprve zobrazit všechny dodavatele, což uživateli umožní pareovat seznam zadáním názvu země do textového pole. Když je TextBox prázdný, SuppliersBLL je metoda třídy GetSuppliersByCountry(country) předána Nothing jako její country vstupní parametr. Tato Nothing 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 pro záznamy, jejichž Country sloupec má NULL hodnotu, a proto se nevrátí žádné záznamy.

Chcete-li vrátit všechny dodavatele, když je pole TextBox země prázdné, můžeme rozšířit metodu GetSuppliersByCountry(country) v BLL vyvolat metodu GetSuppliers() , když je její země parametr a Nothing volat metodu DAL GetSuppliersByCountry(country) jinak. Výsledkem bude vrácení všech dodavatelů, pokud není zadána žádná země, a odpovídající podmnožinu dodavatelů, pokud je zahrnut parametr země.

Změňte metodu GetSuppliersByCountry(country)SuppliersBLL ve třídě na následující:

Public Function GetSuppliersByCountry(country As String) _
    As Northwind.SuppliersDataTable
    If String.IsNullOrEmpty(country) Then
        Return GetSuppliers()
    Else
        Return Adapter.GetSuppliersByCountry(country)
    End If
End Function

Při této změně se na DeclarativeParams.aspx stránce zobrazí všichni dodavatelé při první návštěvě (nebo vždy, když CountryName je textové pole prázdné).

Ve výchozím nastavení se teď zobrazují všichni dodavatelé.

Obrázek 10: Všichni dodavatelé jsou teď ve výchozím nastavení zobrazeni (kliknutím zobrazíte obrázek v plné velikosti)

Souhrn

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) lze získat hodnoty parametrů z řetězce dotazu, proměnných relace, souborů cookie a dokonce i hodnot zadaných uživatelem z webových ovládacích prvků na stránce.

Příklady, na které jsme se podívali v tomto kurzu, ukazují, jak používat hodnoty deklarativních parametrů. Může se ale stát, že potřebujeme použít zdroj parametrů, který není k dispozici, například aktuální datum a čas, nebo ID uživatele návštěvníka, pokud náš web používal členství. V takových scénářích můžeme hodnoty parametrů nastavit programově před vyvoláním metody podkladového objektu ObjectDataSource. V dalším kurzu se dozvíme, jak toho dosáhnout.

Šťastné programování!

O autorovi

Scott Mitchell, autor sedmi knih o ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, školitel a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Můžete ho najít na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím jeho blogu, který najdete na http://ScottOnWriting.NETadrese .

Zvláštní poděkování

Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Hlavním recenzentem pro tento kurz byl Hilton Giesenow. Chcete si projít moje nadcházející články na WEBU MSDN? Pokud ano, dejte mi čáru na mitchell@4GuysFromRolla.comadresu .