Sdílet prostřednictvím


Programové nastavení hodnot parametru ObjectDataSource (C#)

Scott Mitchell

Stáhnout PDF

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

Úvod

Jak jsme viděli v předchozím kurzu, je k dispozici ř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, může být například tato hodnota vázána na vstupní parametr bez zápisu řádku kódu.

Někdy však může dojít k tomu, že hodnota parametru pochází z nějakého zdroje, který ještě není zahrnut některý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ě ID uživatele aktuálně přihlášeného návštěvníka. Nebo možná budeme muset upravit hodnotu parametru před odesláním do metody ObjektDataSource podkladového objektu.

Při každém vyvolání metody ObjectDataSource Select ObjektDataSource nejprve vyvolá svou událost Selecting. Metoda podkladového objektu ObjectDataSource je pak vyvolána. Po dokončení se aktivuje vybraná událost objektu ObjectDataSource (obrázek 1 znázorňuje tuto posloupnost událostí). Hodnoty parametrů předané do metody podkladového objektu ObjectDataSource lze nastavit nebo přizpůsobit v obslužné rutině události události Selecting .

Vybraná a výběrová událost ObjectDataSource vyvolá před a po vyvolání metody jeho podkladového objektu

Obrázek 1: Vyvolání metody objectDataSource Selected a Selecting událostí před a po vyvolání metody podkladového objektu (kliknutím zobrazíte obrázek v plné velikosti)

V tomto kurzu se podíváme na přidání metody do dal a BLL, která přijímá jeden vstupní parametr Monthtypu a vrací EmployeesDataTable objekt naplněný zaměstnanci, kteří mají své výročí přijetí v zadaném Monthint . Náš příklad nastaví tento parametr programově na základě aktuálního měsíce a zobrazí seznam "Výročí zaměstnanců tento měsíc".

Pusťme se do toho.

Krok 1: Přidání metody doEmployeesTableAdapter

V našem prvním příkladu musíme přidat prostředky pro načtení těch zaměstnanců, u kterých HireDate došlo v zadaném měsíci. Abychom mohli tuto funkci poskytovat v souladu s naší architekturou, musíme nejprve vytvořit metodu, EmployeesTableAdapter která se mapuje na správný příkaz SQL. Chcete-li toho dosáhnout, začněte tím, že otevřete sadu Northwind Typed DataSet. Klikněte pravým tlačítkem na EmployeesTableAdapter popisek a zvolte Přidat dotaz.

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

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

Zvolte přidání příkazu SQL, který vrací řádky. Když se dostanete na obrazovku SELECT Zadat příkaz, výchozí SELECT příkaz pro EmployeesTableAdapter příkaz již bude načten. Jednoduše přidejte klauzuli WHERE : 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átit pouze ty řádky, kde sloupec HireDate je menší než nebo rovno <span class=@HiredBeforeDate Parameter" />

Obrázek 3: Vrácení pouze těch řádků, ve kterých HireDate je sloupec menší než nebo rovno parametru @HiredBeforeDate (kliknutím zobrazíte obrázek v plné velikosti)

Nakonec změňte FillBy názvy metod 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 v plné velikosti)

Kliknutím na Dokončit dokončete průvodce a vraťte se na návrhovou plochu datové sady. Teď EmployeesTableAdapter by měl obsahovat novou sadu metod pro přístup k zaměstnancům najatým 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á pro obchodní logiku a logiku přístupu k datům samostatnou vrstvu, musíme do naší BLL přidat metodu, která volá dal a načte 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 zavolá do dal a vrátí výsledky.

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

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

Použití třídy EmployeesBLL

Obrázek 6: Použití EmployeesBLL třídy (kliknutím zobrazíte obrázek v plné velikosti)

Vyberte z metody GetEmployeesByHiredDateMonth(month)

Obrázek 7: Výběr z GetEmployeesByHiredDateMonth(month) metody (kliknutím zobrazíte obrázek v plné velikosti)

Na poslední obrazovce se zobrazí žádost o month zadání zdroje hodnoty parametru. Vzhledem k tomu, že tuto hodnotu nastavíme programově, ponechte zdroj parametru nastavenou na výchozí možnost None (Žádný) a klikněte na Finish (Dokončit).

Nechejte zdroj parametru nastavený na Žádný.

Obrázek 8: Zdroj parametru nechejte nastavený na Žádný (kliknutím zobrazíte obrázek v plné velikosti)

Tím se v kolekci ObjectDataSource SelectParameters vytvoří Parameter objekt, 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 to provést, přejděte do návrhového zobrazení a poklikejte na ObjectDataSource. Případně vyberte ObjectDataSource, přejděte na okno Vlastnosti a klikněte na ikonu blesku. Potom 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 objectDataSource Selecting do třídy kódu na pozadí stránky. V této obslužné rutině události můžeme hodnoty parametru číst a zapisovat do těchto hodnot pomocí , kde je hodnota atributu Name<asp:Parameter> ve značce (InputParameterskolekce může být také indexována ordinálně, jako v e.InputParameters[index]).parameterNamee.InputParameters[parameterName] Pokud chcete nastavit month parametr na aktuální měsíc, přidejte do obslužné rutiny Selecting 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 prostřednictvím prohlížeče vidíme, že tento měsíc (březen) byl přijat pouze jeden zaměstnanec Laura Callahan, která je ve společnosti od roku 1994.

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

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

Souhrn

Zatímco hodnoty parametrů ObjectDataSource lze obvykle nastavit deklarativně, aniž by vyžadoval řá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ě nastavit hodnoty pro jeden nebo více parametrů prostřednictvím InputParameters kolekce.

Tento kurz uzavírá čá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 přejít k podrobnostem z hlavní sestavy do podrobné sestavy.

Šť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 .