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 azt mutatjuk be, hogyan használhat egy paraméterkészletet egy hard-coded értékre a DetailsView vezérlőben megjelenítendő adatok kiválasztásához.
Bevezetés
Az utolsó oktatóanyagban az adatokat egy ObjectDataSource-vezérlőhöz kötött GridView, DetailsView és FormView vezérlővel jelenítettük meg, amely meghívta a metódust az GetProducts()ProductsBLL osztályból. A GetProducts() metódus egy erősen gépelt DataTable-t ad vissza, amelyik minden rekordot tartalmaz a Northwind-adatbázis Products táblájából. Az ProductsBLL osztály további metódusokat tartalmaz a termékek csak részhalmazainak visszaadására – GetProductByProductID(productID)és GetProductsByCategoryID(categoryID)GetProductsBySupplierID(supplierID). Ez a három módszer egy bemeneti paramétert vár, amely jelzi a visszaadott termékinformációk szűrését.
Az ObjectDataSource használható olyan metódusok meghívására, amelyek bemeneti paramétereket várnak, de ehhez meg kell határoznunk, hogy ezek a paraméterek honnan származnak. A paraméterértékek kódoltak lehetnek, vagy különböző dinamikus forrásokból származhatnak, például lekérdezési értékekből, munkamenet-változókból, a lapon található webvezérlő tulajdonságértékéből vagy másból.
Ebben az oktatóanyagban először szemléltetjük, hogyan használhatunk egy rögzített értékre beállított paramétert. Pontosabban, hozzáadunk az oldalhoz egy részletező nézetet, amely egy adott termékkel kapcsolatos információkat jelenít meg, nevezetesen Chef Anton Gumbo Mixéről, amelynek egy ProductID értéke van 5-ből. A következő lépésben bemutatjuk, hogyan állíthatja be a paraméter értékét egy webvezérlő alapján. A TextBox használatával lehetővé tesszük, hogy a felhasználó begépeljen egy országot vagy régiót, majd rákattinthat egy gombra az adott országban/régióban található szállítók listájának megtekintéséhez.
Hard-Coded paraméterérték használata
Az első példában először adjon hozzá egy DetailsView-vezérlőt a DeclarativeParams.aspxBasicReporting mappában lévő laphoz. A DetailsView intelligens címkéje alapján válassza <az Új adatforrás> lehetőséget a legördülő listából, és válasszon egy ObjectDataSource-t.
1. ábra: ObjectDataSource hozzáadása a laphoz (ide kattintva megtekintheti a teljes méretű képet)
Ez automatikusan elindítja az ObjectDataSource vezérlő Adatforrás kiválasztása varázslóját. Válassza ki az ProductsBLL osztályt a varázsló első képernyőjén.
2. ábra: Jelölje ki az osztályt ProductsBLL (kattintson ide a teljes méretű kép megtekintéséhez)
Mivel egy adott termék adatait szeretnénk megjeleníteni, ezt a GetProductByProductID(productID) módszert szeretnénk használni.
3. ábra: Válassza ki a metódust GetProductByProductID(productID) (kattintson ide a teljes méretű kép megtekintéséhez)
Mivel a kiválasztott metódus tartalmaz egy paramétert, a varázsló még egy képernyővel rendelkezik, ahol a rendszer a paraméterhez használandó érték meghatározására kéri. A bal oldali lista a kiválasztott metódus összes paraméterét tartalmazza. Mert GetProductByProductID(productID) csak egy productIDvan. A jobb oldalon megadhatja a kiválasztott paraméter értékét. A paraméterforrás legördülő listája felsorolja a paraméter értékének különböző lehetséges forrásait. Mivel meg szeretnénk adni egy 5-ös kemény kóddal megadott értéket a productID paraméterhez, hagyja a paraméter forrását Nincs értékként, és írja be az 5 értéket a DefaultValue szövegmezőbe.
4. ábra: A paraméterhez productID 5-ös Hard-Coded paraméterérték lesz felhasználva (kattintson ide a teljes méretű kép megtekintéséhez)
Az Adatforrás konfigurálása varázsló befejezése után az ObjectDataSource vezérlő deklaratív jelölése tartalmaz egy Parameter objektumot a SelectParameters gyűjteményben, minden bemeneti paraméterhez, amelyet a SelectMethod tulajdonságban meghatározott metódus vár. Mivel a példában használt módszer csak egyetlen bemeneti paramétert vár, parameterIDitt csak egy bejegyzés szerepel. A SelectParameters gyűjtemény bármilyen osztályt tartalmazhat, amely a ParameterSystem.Web.UI.WebControls névtérben lévő osztályból származik. A rögzített paraméterértékek esetében az alaposztályt Parameter használja a rendszer, de a többi paraméterforrás-beállításhoz származtatott Parameter osztályt használ, szükség esetén saját egyéni paramétertípusokat is létrehozhat.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
<SelectParameters>
<asp:Parameter DefaultValue="5" Name="productID"
Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Megjegyzés:
Ha a saját számítógépén követi a műveletet, az itt látható deklaratív korrektúra tartalmazhat InsertMethod, UpdateMethod, DeleteMethod tulajdonságok értékeket, valamint DeleteParameters is. Az ObjectDataSource Adatforrás kiválasztása varázslója automatikusan megadja a beszúráshoz, frissítéshez és törléshez használni kívánt metódusokat ProductBLL , ezért ha nem törölte őket explicit módon, azok a fenti korrektúra része lesznek.
Amikor megnyitja ezt a lapot, a webes adatvezérlő meghívja az ObjectDataSource Select metódusát, amely az ProductsBLL osztály GetProductByProductID(productID) metódusát hívja meg, a productID bemeneti paraméterhez használt 5-ös keményen kódolt értékkel. A módszer egy erősen gépelt ProductDataTable objektumot ad vissza, amely egyetlen sort tartalmaz Chef Anton Gumbo Mix információival (a termék ProductID 5).
5. ábra: Anton séf Gumbo Mixéről szóló információk jelennek meg (Kattintson ide a teljes méretű kép megtekintéséhez)
Paraméterérték beállítása egy webvezérlő tulajdonságértékére
Az ObjectDataSource paraméterértékei a lapon található webvezérlő értéke alapján is beállíthatók. Ennek szemléltetéséhez hozzunk létre egy GridView-t, amely felsorolja a felhasználó által megadott országban/régióban található összes szállítót. Ehhez először adjon hozzá egy Szövegdobozt ahhoz a laphoz, amelybe a felhasználó beírhat egy ország/országnevet. Állítsa be ennek a Szövegdoboz vezérlőelemnek a ID tulajdonságát CountryName. Hozzáadhat egy gomb webvezérlőt is.
6. ábra: Szövegdoboz hozzáadása a laphoz IDCountryName (ide kattintva megtekintheti a teljes méretű képet)
Ezután vegyen fel egy GridView-t a lapra, és az intelligens címkéből válasszon egy új ObjectDataSource-t. Mivel meg szeretnénk jeleníteni a szállító adatait, válassza ki az SuppliersBLL osztályt a varázsló első képernyőjén. A második képernyőn válassza ki a metódust GetSuppliersByCountry(country) .
7. ábra: Válassza ki a metódust GetSuppliersByCountry(country) (kattintson ide a teljes méretű kép megtekintéséhez)
Mivel a GetSuppliersByCountry(country) metódus bemeneti paraméterrel rendelkezik, a varázsló ismét tartalmaz egy végső képernyőt a paraméter értékének kiválasztásához. Ezúttal állítsa a paraméterforrást a Control (Vezérlés) értékre. Ez kitölti a ControlID legördülő listát a lapon található vezérlők nevével; válassza ki a CountryName vezérlőt a listából. A lap első megnyitásakor a CountryName Szövegdoboz üres lesz, így a rendszer nem ad vissza eredményt, és nem jelenik meg semmi. Ha alapértelmezés szerint meg szeretne jeleníteni néhány eredményt, ennek megfelelően állítsa be a DefaultValue szövegmezőt.
8. ábra: A paraméterérték beállítása a CountryName Vezérlő értékre (ide kattintva megtekintheti a teljes méretű képet)
Az ObjectDataSource deklaratív korrektúra kissé eltér az első példától, amely a standard objektum helyett egy Parameter használ. A ControlParameter a webvezérlő ID megadásához és a paraméterekhez szükséges tulajdonságértékek használatához további tulajdonságokkal rendelkezik. Az Adatforrás konfigurálása varázsló elég okos volt ahhoz, hogy megállapítsa, hogy egy Szövegdoboz esetében valószínűleg a Text paraméterérték tulajdonságát szeretnénk használni. Ha azonban a webes vezérlőtől eltérő tulajdonságértéket szeretne használni, itt vagy a varázsló "Speciális tulajdonságok megjelenítése" hivatkozására kattintva módosíthatja az PropertyName értéket.
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
<SelectParameters>
<asp:ControlParameter ControlID="CountryName"
Name="country" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
Amikor első alkalommal látogatja meg a lapot, a CountryName Szövegdoboz üres. Az ObjectDataSource Select metódusát továbbra is meghívja a GridView, de a null érték átadódik a GetSuppliersByCountry(country) metódusnak. A TableAdapter átalakítja a null elemet adatbázis NULL értékké (DBNull.Value), de a GetSuppliersByCountry(country) metódus által használt lekérdezés úgy van megírva, hogy nem ad vissza értékeket, amikor a paraméterhez NULL értéket adunk meg @CategoryID. Röviden: a rendszer nem ad vissza szállítókat.
Ha azonban a látogató belép egy országba, és a Szállítók megjelenítése gombra kattint, a rendszer újra lekérdezi az ObjectDataSource metódustSelect, és paraméterként Text átadja a TextBox vezérlő country értékét.
9. ábra: A kanadai szállítók láthatók (kattintson ide a teljes méretű kép megtekintéséhez)
Az összes szállító alapértelmezés szerint megjelenítése
Ahelyett, hogy egyik beszállítót sem jelenítenénk meg az oldal első megtekintésekor, érdemes lehet az összes beszállítót megjeleníteni, így a felhasználó a szövegmezőben megadhat egy ország/régió nevét. Ha a Szövegdoboz üres, az SuppliersBLL osztály GetSuppliersByCountry(country) metódusának null bemeneti paramétereként country érték lesz átadva. Ez az adat ezután átkerül a DAL null metódusába, ahol a GetSupplierByCountry(country) paraméterhez NULL adatbázisérték lesz belőle a következő lekérdezésben:
SELECT SupplierID, CompanyName, Address, City, Country, Phone
FROM Suppliers
WHERE Country = @Country
A kifejezés Country = NULL mindig Hamis értéket ad vissza, még akkor is, ha Country az oszlop értéke van NULL , ezért a rendszer nem ad vissza rekordokat.
Ahhoz, hogy a minden szállítót visszakapjuk, amikor az országszövegdoboz üres, módosíthatjuk a GetSuppliersByCountry(country) metódust a BLL-ben. Ha az ország paramétere GetSuppliers(), akkor meghívjuk a null metódust, más esetben pedig a DAL metódusát GetSuppliersByCountry(country). Ez az összes beszállító visszaadását eredményezi, ha nincs megadva ország, és a szállítók megfelelő részhalmaza, amikor az országparaméter szerepel.
Módosítsa az GetSuppliersByCountry(country) osztály metódusát SuppliersBLL a következőre:
public Northwind.SuppliersDataTable GetSuppliersByCountry(string country)
{
if (string.IsNullOrEmpty(country))
return GetSuppliers();
else
return Adapter.GetSuppliersByCountry(country);
}
Ezzel a módosítással az DeclarativeParams.aspx oldal megjeleníti az összes szállítót, amikor először látogatják meg (vagy amikor a CountryName Szövegdoboz üres).
10. ábra: Az összes szállító alapértelmezés szerint megjelenik (kattintson ide a teljes méretű kép megtekintéséhez)
Összefoglalás
Ahhoz, hogy bemeneti paraméterekkel rendelkező metódusokat használhassunk, meg kell adnunk a paraméterek értékeit az ObjectDataSource gyűjteményében SelectParameters . A különböző típusú paraméterek lehetővé teszik, hogy a paraméter értéke különböző forrásokból származhasson. Az alapértelmezett paramétertípus egy keményen kódolt értéket használ, de ugyanilyen könnyen (és kódsor nélkül) a paraméterértékekhez hozzá lehet férni a lekérdezési láncból, munkamenet változókból, cookie-kból, valamint a lap webes vezérlőin a felhasználó által megadott értékekből is.
Az oktatóanyagban bemutatott példák a deklaratív paraméterértékek használatát mutatták be. Előfordulhat azonban, hogy olyan paraméterforrást kell használnunk, amely nem érhető el, például az aktuális dátumot és időpontot, vagy ha webhelyünk tagságot használt, a látogató felhasználói azonosítóját. Ilyen forgatókönyvek esetén a paraméterértékeket programozott módon állíthatjuk be, mielőtt az ObjectDataSource invokálást indít el a mögöttes objektum metódusán. Ezt a következő oktatóanyagban fogjuk látni.
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.