Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
által Scott Mitchell
Ebben az oktatóanyagban egy olyan metódust adunk hozzá a DAL-hoz és a BLL-hez, amely egyetlen bemeneti paramétert fogad el, és adatokat ad vissza. A példa programozott módon állítja be ezt a paramétert.
Bevezetés
Ahogy az előző oktatóanyagban láttuk, számos lehetőség áll rendelkezésre a paraméterértékek deklaratív átadására az ObjectDataSource metódusainak. Ha a paraméter értéke keményen kódolva van, a lap egyik webes vezérlőeleméből származik, vagy egy adatforrás-objektum Parameter által olvasható bármely más forrásban található, például ez az érték kódsor írása nélkül köthető a bemeneti paraméterhez.
Előfordulhat azonban, hogy a paraméter értéke olyan forrásból származik, amelyet még nem számolt el az egyik beépített adatforrás-objektum Parameter . Ha webhelyünk támogatja a felhasználói fiókokat, érdemes lehet a paramétert az aktuálisan bejelentkezett látogató felhasználói azonosítója alapján beállítani. Vagy előfordulhat, hogy testre kell szabnunk a paraméter értékét, mielőtt elküldenénk az ObjectDataSource mögöttes objektumának metódusára.
Amikor az ObjectDataSource metódusát Select meghívják, az ObjectDataSource először elindítja a kiválasztási eseményt. Ezután meghívja az ObjectDataSource mögöttes objektumának metódusát. Miután befejeződött az ObjectDataSource Selected eseménye, az 1. ábra az események sorozatát szemlélteti. Az ObjectDataSource mögöttes objektumának metódusába átadott paraméterértékek beállíthatók vagy testre szabhatók az Selecting esemény eseménykezelőjében.
** Az ObjectDataSource kiválasztott és kiválasztási eseményei a mögöttes objektum metódusának meghívása előtt és után aktiválódnak.
1. ábra: Az ObjectDataSource Selected és Selecting eseményei aktiválódnak az alapul szolgáló objektum metódusa előtt és után (kattintson ide a teljes méretű kép megtekintéséhez)
Ebben az oktatóanyagban megvizsgáljuk, hogyan adhatunk hozzá egy metódust a DAL-hoz és a BLL-hez, amely egyetlen bemeneti paramétert fogad el, Month típusú Integer, és egy olyan EmployeesDataTable objektumot ad vissza, amely azokkal az alkalmazottakkal van feltöltve, akiknek a felvételi évfordulója a megadott Month hónapban van. A példánk ezt a paramétert programozott módon állítja be az aktuális hónap alapján, és megjeleníti az "Alkalmazotti évfordulók ebben a hónapban" listát.
Lássunk hozzá!
1. lépés: Metódus hozzáadása a következőhöz:EmployeesTableAdapter
Az első példánkhoz hozzá kell adnunk egy módszert, amellyel lekérhetjük azoknak az alkalmazottaknak az adatait, akiknek HireDate egy adott hónapban megtörtént. Ahhoz, hogy ezt a funkciót az architektúránknak megfelelően biztosíthassuk, először létre kell hoznunk egy metódust, amely EmployeesTableAdapter megfelel a megfelelő SQL-utasításnak. Ehhez először nyissa meg a Northwind typed DataSetet. Kattintson a jobb gombbal a címkére, és válassza a EmployeesTableAdapter Lekérdezés hozzáadása parancsot.
2. ábra: Új lekérdezés hozzáadása a EmployeesTableAdapter képhez (ide kattintva megtekintheti a teljes méretű képet)
Adja hozzá a sorokat visszaadó SQL-utasítást. Amikor eléri a SELECT Utasítás megadása képernyőt, az SELECT alapértelmezett EmployeesTableAdapter utasítás már be lesz töltve. Egyszerűen adja hozzá a WHERE záradékot: WHERE DATEPART(m, HireDate) = @Month.
A DATEPART egy T-SQL függvény, amely egy datetime adott típusú dátumrészt ad vissza. Ebben az esetben az DATEPART oszlop hónapját használjukHireDate.
@HiredBeforeDate Parameter" />
3. ábra: Csak azokat a sorokat adja vissza, ahol az HireDate oszlop kisebb vagy egyenlő a paraméternél (@HiredBeforeDate teljes méretű képet)
Végül módosítsa a FillBy és GetDataBy metódusneveket FillByHiredDateMonth és GetEmployeesByHiredDateMonth metódusnevekre.
4. ábra: Válassza ki a megfelelőbb metódusneveket, mint FillBy és GetDataBy (kattintson ide a teljes méretű kép megtekintéséhez)
A Befejezés gombra kattintva fejezze be a varázslót, és térjen vissza az Adathalmaz tervezési felületére. Az EmployeesTableAdapter új módszereknek mostantól tartalmazniuk kell egy új metóduskészletet a megadott hónapban felvett alkalmazottak elérésére.
5. ábra: Az új metódusok megjelennek az adathalmaz tervezőfelületén (ide kattintva megtekintheti a teljes méretű képet)
2. lépés: A metódus hozzáadása azGetEmployeesByHiredDateMonth(month)üzleti logikai réteghez
Mivel az alkalmazásarchitektúra egy külön réteget használ az üzleti logikához és az adathozzáférési logikához, hozzá kell adnunk egy metódust a BLL-hez, amely lehívja a DAL-t, hogy lekérje a megadott dátum előtt felvett alkalmazottakat. Nyissa meg a EmployeesBLL.vb fájlt, és adja hozzá a következő módszert:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
As Northwind.EmployeesDataTable
Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function
Az osztály többi metódusához hasonlóan GetEmployeesByHiredDateMonth(month) egyszerűen lehívja a DAL-t, és visszaadja az eredményeket.
3. lépés: Azon alkalmazottak megjelenítése, akiknek a felvételének évfordulója ebben a hónapban van
A példához az utolsó lépés az, hogy megjelenítsük azokat az alkalmazottakat, akiknek a felvételi évfordulója ebben a hónapban van. Először vegyen fel egy GridView-t a ProgrammaticParams.aspxBasicReporting mappában lévő lapra, és adjon hozzá egy új ObjectDataSource-t adatforrásként. Konfigurálja az ObjectDataSource-t úgy, hogy az EmployeesBLL osztály SelectMethodGetEmployeesByHiredDateMonth(month) értékre legyen állítva.
6. ábra: Az osztály használata EmployeesBLL (kattintson ide a teljes méretű kép megtekintéséhez)
7. ábra: Válassza ki a GetEmployeesByHiredDateMonth(month) metódusból (kattintson ide a teljes méretű kép megtekintéséhez)
Az utolsó képernyő arra kér minket, hogy adja meg a month paraméter értékének forrását. Mivel ezt az értéket programozott módon fogjuk beállítani, hagyja meg a paraméterforrás alapértelmezett Nincs beállítását, és kattintson a Befejezés gombra.
8. ábra: Hagyja meg a paraméterforrást a Nincs értékre (kattintson ide a teljes méretű kép megtekintéséhez)
Ez létrehoz egy Parameter objektumot az ObjectDataSource gyűjteményében SelectParameters , amely nem rendelkezik megadott értékkel.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
<SelectParameters>
<asp:Parameter Name="month" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Az érték programozott beállításához létre kell hoznunk egy eseménykezelőt az ObjectDataSource eseményéhez Selecting . Ehhez nyissa meg a Tervező nézetet, és kattintson duplán az ObjectDataSource-ra. Másik lehetőségként válassza az ObjectDataSource-t, lépjen a Tulajdonságok ablakra, és kattintson a villámgyors ikonra. Ezután kattintson duplán az esemény melletti Selecting szövegmezőbe, vagy írja be a használni kívánt eseménykezelő nevét. Harmadik lehetőségként létrehozhatja az eseménykezelőt úgy, hogy kiválasztja az ObjectDataSource-t és annak eseményét Selecting a lap kód mögötti osztályának tetején található két legördülő listából.
9. ábra: Kattintson a Villám bolt ikonra a Tulajdonságok ablakban a webvezérlő eseményeinek listázásához
Mindhárom módszer új eseménykezelőt ad hozzá a lap kód mögötti osztályához az ObjectDataSource Selecting eseményéhez. Ebben az eseménykezelőben a paraméterértékeket a e.InputParameters(parameterName) használatával olvashatjuk és írhatjuk, ahol a parameterName a Name tag <asp:Parameter> attribútumának értéke (a InputParameters gyűjtemény is sorszámszerűen indexelhető, mint a e.InputParameters(index) esetében). Ha a paramétert month az aktuális hónapra szeretné állítani, adja hozzá a következőket az Selecting eseménykezelőhöz:
Protected Sub ObjectDataSource1_Selecting _
(sender As Object, e As ObjectDataSourceSelectingEventArgs) _
Handles ObjectDataSource1.Selecting
e.InputParameters("month") = DateTime.Now.Month
End Sub
Amikor egy böngészőben látogatja meg ezt az oldalt, láthatjuk, hogy ebben a hónapban (márciusban) csak egy alkalmazottat vettek fel Laura Callahant, aki 1994 óta dolgozik a vállalatnál.
10. ábra: Azok az alkalmazottak, akiknek az évfordulói ebben a hónapban megjelennek (Kattintson ide a teljes méretű kép megtekintéséhez)
Összefoglalás
Bár az ObjectDataSource paramétereinek értékei általában deklaratív módon állíthatók be, kódsor megkövetelése nélkül, a paraméterértékek programozott módon is beállíthatók. Mindössze annyit kell tennünk, hogy létrehozunk egy eseménykezelőt az ObjectDataSource eseményéhez Selecting , amely a mögöttes objektum metódusának meghívása előtt aktiválódik, és manuálisan állíthatja be egy vagy több paraméter értékeit a InputParameters gyűjteményen keresztül.
Ez az oktatóanyag az Alapszintű jelentéskészítés szakaszt zárja. A következő oktatóanyag elindítja a Szűrés és Master-Details Forgatókönyvek szakaszt, amelyben olyan technikákat vizsgálunk meg, amelyekkel a látogató adatokat szűrhet és részletezhet egy főjelentésből egy részletjelentésbe.
Boldog programozást!
Tudnivalók a szerzőről
Scott Mitchell, hét ASP/ASP.NET-könyv szerzője és a 4GuysFromRolla.com alapítója, 1998 óta dolgozik a Microsoft webtechnológiáival. Scott független tanácsadóként, edzőként és íróként dolgozik. Legújabb könyve Sams Tanuld meg ASP.NET 2.0 24 óra alatt. Ő itt elérhető mitchell@4GuysFromRolla.com.
Külön köszönet
Ezt az oktatóanyag-sorozatot sok hasznos véleményező áttekintette. Az oktatóanyag vezető véleményezője Hilton Giesenow volt. Szeretné áttekinteni a közelgő MSDN-cikkeimet? Ha igen, írj egy sort a mitchell@4GuysFromRolla.com-ra.