Sdílet prostřednictvím


Programové nastavení hodnot parametru ObjectDataSource (C#)

od Scotta Mitchella

Stáhnout PDF

V tomto kurzu se podíváme na přidání metody do naší dal a BLL, která přijímá jeden vstupní parametr a vrací data. Příklad nastaví tento parametr programově.

Úvod

Jak jsme viděli v předchozím kurzu, je k dispozici celá řada možností pro deklarativní předávání hodnot parametrů metodám ObjectDataSource. Pokud je hodnota parametru pevně zakódovaná, pochází z webového ovládacího prvku na stránce nebo je v jiném zdroji, který je čitelný objektem zdroje Parameter dat, například tato hodnota může být vázána na vstupní parametr bez zápisu řádku kódu.

Někdy však může docházet k tomu, že hodnota parametru pochází z některého zdroje, který ještě není zohledněný jedním z předdefinovaných objektů zdroje Parameter dat. Pokud náš web podporuje uživatelské účty, můžeme chtít nastavit parametr na základě aktuálně přihlášeného ID uživatele návštěvníka. Možná budeme muset upravit hodnotu parametru před odesláním do metody základního objektu ObjectDataSource.

Pokaždé, když se vyvolá metoda Select objektu ObjectDataSource, ObjectDataSource nejprve vyvolá svou událost Selecting. Metoda základního objektu ObjectDataSource se pak vyvolá. Po dokončení události Selected ObjectDataSource se aktivuje (obrázek 1 znázorňuje tuto posloupnost událostí). Hodnoty parametrů, které jsou předávány do metody základního objektu ObjectDataSource, lze nastavit nebo přizpůsobit v obslužné rutině události Selecting.

Události Selected a Selecting u ObjectDataSource jsou aktivovány před a po vyvolání jeho metody základního objektu

Obrázek 1: Události Selected a Selecting objektu ObjectDataSource se aktivují před a po vyvolání metody základního objektu (Kliknutím zobrazíte obrázek v plné velikosti)

V tomto tutoriálu se podíváme na přidání metody do naší DAL a BLL, která přijímá jeden vstupní parametr Month, typu int a vrátí EmployeesDataTable objekt obsahující zaměstnance, kteří mají své výročí přijetí do zaměstnání v určeném Month. Náš příklad nastaví tento parametr programově na základě aktuálního měsíce a zobrazí se seznam "Výročí zaměstnance tento měsíc".

Pojďme začít!

Krok 1: Přidání metody doEmployeesTableAdapter

V našem prvním příkladu potřebujeme přidat způsob získání zaměstnanců, u nichž HireDate nastala v zadaném měsíci. Abychom mohli tuto funkci poskytnout v souladu s naší architekturou, musíme nejprve vytvořit v EmployeesTableAdapter metodu, která se mapuje na správný příkaz SQL. Začněte otevřením Northwind Typed DataSet. Klikněte pravým tlačítkem na EmployeesTableAdapter popisek a zvolte Přidat dotaz.

Přidání nového dotazu do objektu EmployeesTableAdapter

Obrázek 2: Přidání nového dotazu na EmployeesTableAdapterobrázek (kliknutím zobrazíte obrázek v plné velikosti)

Zvolte přidání příkazu SQL, který vrací řádky. Když se dostanete na SELECT obrazovku Zadat příkaz, výchozí SELECT příkaz pro EmployeesTableAdapter již bude načten. Jednoduše přidejte do WHERE klauzule: WHERE DATEPART(m, HireDate) = @Month. DATEPART je funkce T-SQL, která vrací konkrétní část typu kalendářního datetime data. V tomto případě používáme DATEPART k vrácení měsíce HireDate sloupce.

Vrátí pouze řádky, ve kterých je sloupec HireDate menší nebo roven <span class= @HiredBeforeDate Parametr" />

Obrázek 3: Vrátí pouze řádky, ve kterých HireDate je sloupec menší než nebo rovno parametru @HiredBeforeDate (kliknutím zobrazíte obrázek s plnou velikostí).

Nakonec změňte názvy metod FillBy a GetDataBy na FillByHiredDateMonth a GetEmployeesByHiredDateMonth.

Zvolte vhodnější názvy metod než FillBy a GetDataBy.

Obrázek 4: Zvolte vhodnější názvy metod než FillBy a GetDataBy (kliknutím zobrazíte obrázek s plnou velikostí)

Kliknutím na tlačítko Dokončit dokončete průvodce a vraťte se na návrhovou plochu datové sady. Nyní EmployeesTableAdapter by měla obsahovat novou sadu metod pro přístup k zaměstnancům, kteří jsou přijati v zadaném měsíci.

Nové metody se zobrazí na návrhové ploše datové sady.

Obrázek 5: Nové metody se zobrazí na návrhové ploše datové sady (kliknutím zobrazíte obrázek v plné velikosti).

Krok 2: PřidáníGetEmployeesByHiredDateMonth(month)metody do vrstvy obchodní logiky

Vzhledem k tomu, že naše aplikační architektura používá samostatnou vrstvu pro obchodní logiku a logiku přístupu k datům, musíme do naší BLL přidat metodu, která se obrací k DAL a získává zaměstnance najaté před zadaným datem. EmployeesBLL.cs Otevřete soubor a přidejte následující metodu:

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)
{
    return Adapter.GetEmployeesByHiredDateMonth(month);
}

Stejně jako u ostatních metod v této třídě GetEmployeesByHiredDateMonth(month) jednoduše vyvolá volání do DAL a vrací výsledky.

Krok 3: Zobrazení zaměstnanců, jejichž výročím nástupu je tento měsíc

Posledním krokem pro tento příklad je zobrazení zaměstnanců, jejichž náborové výročí je tento měsíc. Začněte přidáním GridView na ProgrammaticParams.aspx stránku ve BasicReporting složce a přidejte nový ObjectDataSource jako zdroj dat. Nakonfigurujte ObjectDataSource tak, aby používal třídu EmployeesBLL a nastavte SelectMethod na GetEmployeesByHiredDateMonth(month).

Použití třídy EmployeesBLL

Obrázek 6: Použití EmployeesBLL třídy (kliknutím zobrazíte obrázek s plnou velikostí)

Vybrat z metody GetEmployeesByHiredDateMonth(month)

Obrázek 7: Výběr z GetEmployeesByHiredDateMonth(month) metody (kliknutím zobrazíte obrázek s plnou velikostí)

Na poslední obrazovce se nás zeptáme, abychom zadali zdroj hodnoty parametru month . Vzhledem k tomu, že tuto hodnotu nastavíme programově, ponechte zdroj parametru nastavený na výchozí možnost Žádné a klikněte na Dokončit.

Ponechte zdroj parametru nastavený na žádný.

Obrázek 8: Ponechte zdroj parametrů nastavený na žádný (kliknutím zobrazíte obrázek s plnou velikostí)

Tím se vytvoří Parameter objekt v kolekci ObjectDataSource SelectParameters , která nemá zadanou hodnotu.

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
    <SelectParameters>
        <asp:Parameter Name="month" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

Abychom tuto hodnotu nastavili programově, musíme vytvořit obslužnou rutinu události pro událost ObjectDataSource Selecting . Chcete-li toho dosáhnout, přejděte do návrhového zobrazení a poklikejte na ObjectDataSource. Případně vyberte ObjectDataSource, přejděte do okna Vlastnosti a klikněte na ikonu blesku. Dále poklikejte do textového pole vedle Selecting události nebo zadejte název obslužné rutiny události, kterou chcete použít.

Kliknutím na ikonu Blesku v okně Vlastnosti zobrazíte seznam událostí webového ovládacího prvku.

Obrázek 9: Kliknutím na ikonu Blesku v okně Vlastnosti zobrazíte seznam událostí webového ovládacího prvku.

Oba přístupy přidávají novou obslužnou rutinu události pro událost Selecting objektu ObjectDataSource do code-behind třídy stránky. V této obslužné rutině události můžeme číst a zapisovat do hodnot parametrů pomocí e.InputParameters[parameterName], kde parameterName je hodnota atributu Name ve značce <asp:Parameter> (InputParameters kolekce může být také indexována podle pořadí, jako v e.InputParameters[index]). Pokud chcete nastavit month parametr na aktuální měsíc, přidejte do Selecting obslužné rutiny události následující:

protected void ObjectDataSource1_Selecting
    (object sender, ObjectDataSourceSelectingEventArgs e)
{
    e.InputParameters["month"] = DateTime.Now.Month;
}

Při návštěvě této stránky v prohlížeči vidíme, že tento měsíc (březen) byl zaměstnán pouze jeden zaměstnanec, a to Laura Callahan, která je ve společnosti od roku 1994.

Tito zaměstnanci, jejichž výročí jsou tento měsíc zobrazena

Obrázek 10: Tito zaměstnanci, jejichž výročí tento měsíc jsou zobrazeny (kliknutím zobrazíte obrázek v plné velikosti).

Shrnutí

I když hodnoty parametrů ObjectDataSource lze obvykle nastavit deklarativní, aniž by vyžadovaly řádek kódu, je snadné nastavit hodnoty parametrů programově. Stačí vytvořit obslužnou rutinu události pro událost ObjectDataSource Selecting , která se aktivuje před vyvolání metody podkladového objektu a ručně nastaví hodnoty pro jeden nebo více parametrů prostřednictvím InputParameters kolekce.

Tento kurz končí částí Základní vytváření sestav. Další kurz zahájí část Filtrování a Master-Details Scénáře, ve které se podíváme na techniky umožňující návštěvníkovi filtrovat data a podrobněji se ponořit z hlavní zprávy do podrobné zprávy.

Šť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 Naučte se ASP.NET 2.0 za 24 hodin. Může být dosažitelný na mitchell@4GuysFromRolla.comadrese .

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, napište mi zprávu na mitchell@4GuysFromRolla.com.