Programové nastavení hodnot parametru ObjectDataSource (C#)
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
.
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 Month
typu a vrací EmployeesDataTable
objekt naplněný zaměstnanci, kteří mají své výročí přijetí v zadaném Month
int
. 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.
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.
@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
.
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.
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)
.
Obrázek 6: Použití EmployeesBLL
třídy (kliknutím zobrazíte obrázek v plné velikosti)
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).
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.
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 (InputParameters
kolekce může být také indexována ordinálně, jako v e.InputParameters[index]
).parameterName
e.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.
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 .