Parametri dichiarativi (C#)
In questa esercitazione verrà illustrato come usare un parametro impostato su un valore hardcoded per selezionare i dati da visualizzare in un controllo DetailsView.
Introduzione
Nell'ultima esercitazione è stata esaminata la visualizzazione dei dati con i controlli GridView, DetailsView e FormView associati a un controllo ObjectDataSource che ha richiamato il GetProducts()
metodo dalla ProductsBLL
classe. Il GetProducts()
metodo restituisce una tabella DataTable fortemente tipizzata popolata con tutti i record della tabella del Products
database Northwind. La ProductsBLL
classe contiene metodi aggiuntivi per restituire solo sottoinsieme dei prodotti - GetProductByProductID(productID)
, GetProductsByCategoryID(categoryID)
e GetProductsBySupplierID(supplierID)
. Questi tre metodi prevedono un parametro di input che indica come filtrare le informazioni sul prodotto restituite.
L'oggetto ObjectDataSource può essere usato per richiamare i metodi che prevedono parametri di input, ma per farlo è necessario specificare da dove provengono i valori per questi parametri. I valori dei parametri possono essere hardcoded o possono venire da diverse origini dinamiche, tra cui: valori querystring, variabili sessione, valore della proprietà di un controllo Web nella pagina o altri.
Per questa esercitazione viene illustrato come usare un parametro impostato su un valore hardcoded. In particolare, si esaminerà l'aggiunta di detailsView alla pagina che visualizza informazioni su un prodotto specifico, ovvero Chef Anton Gumbo Mix, che ha un ProductID
valore di 5. Verrà quindi illustrato come impostare il valore del parametro in base a un controllo Web. In particolare, si userà un controllo TextBox per consentire all'utente di digitare un paese o un'area geografica, dopo il quale è possibile fare clic su un pulsante per visualizzare l'elenco dei fornitori che risiedono in tale paese/area geografica.
Uso di un valore di parametro Hard-Coded
Per il primo esempio, iniziare aggiungendo un controllo DetailsView alla DeclarativeParams.aspx
pagina nella BasicReporting
cartella. Nella smart tag di DetailsView selezionare <Nuova origine> dati dall'elenco a discesa e scegliere di aggiungere objectDataSource.
Figura 1: Aggiungere objectDataSource alla pagina (fare clic per visualizzare l'immagine a dimensioni complete)
Verrà avviata automaticamente la procedura guidata Scegli origine dati del controllo ObjectDataSource. Selezionare la ProductsBLL
classe dalla prima schermata della procedura guidata.
Figura 2: Selezionare la classe (fare clic per visualizzare l'immagineProductsBLL
full-size)
Poiché si vogliono visualizzare informazioni su un determinato prodotto, si vuole usare il GetProductByProductID(productID)
metodo .
Figura 3: Scegliere il metodo (Fare clic per visualizzare l'immagineGetProductByProductID(productID)
full-size)
Poiché il metodo selezionato include un parametro, è disponibile una schermata più per la procedura guidata, in cui viene chiesto di definire il valore da usare per il parametro. L'elenco a sinistra mostra tutti i parametri per il metodo selezionato. Per GetProductByProductID(productID)
c'è solo un productID
. A destra è possibile specificare il valore per il parametro selezionato. L'elenco a discesa origine parametro enumera le varie origini possibili per il valore del parametro. Poiché si vuole specificare un valore hardcoded pari a 5 per il productID
parametro, lasciare l'origine parametro come None e immettere 5 nella casella di testo DefaultValue.
Figura 4: valore del parametro Hard-Coded 5 verrà usato per il productID
parametro (fare clic per visualizzare l'immagine a dimensioni complete)
Dopo aver completato la configurazione guidata origine dati, il markup dichiarativo del controllo ObjectDataSource include un Parameter
oggetto nella SelectParameters
raccolta per ognuno dei parametri di input previsti dal metodo definito nella SelectMethod
proprietà. Poiché il metodo usato in questo esempio prevede solo un singolo parametro di input, parameterID
è disponibile una sola voce qui. La SelectParameters
raccolta può contenere qualsiasi classe che deriva dalla Parameter
classe nello System.Web.UI.WebControls
spazio dei nomi. Per i valori dei parametri hard coded viene usata la classe base Parameter
, ma per le altre opzioni di origine dei parametri viene usata una classe derivata Parameter
. È anche possibile creare tipi di parametri personalizzati, se necessario.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
<SelectParameters>
<asp:Parameter DefaultValue="5" Name="productID"
Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Nota
Se si sta seguendo nel proprio computer, il markup dichiarativo visualizzato in questo punto può includere valori per le InsertMethod
proprietà , UpdateMethod
e DeleteMethod
, nonché DeleteParameters
. La procedura guidata Scegli origine dati di ObjectDataSource specifica automaticamente i metodi da ProductBLL
usare per l'inserimento, l'aggiornamento e l'eliminazione, pertanto, a meno che non siano stati cancellati in modo esplicito, verranno inclusi nel markup precedente.
Quando si visita questa pagina, il controllo Web dati richiama il metodo ObjectDataSource Select
, che chiamerà il ProductsBLL
metodo della GetProductByProductID(productID)
classe usando il valore hardcoded di 5 per il productID
parametro di input. Il metodo restituirà un oggetto fortemente tipizzato ProductDataTable
che contiene una singola riga con informazioni sul Mix Gumbo di Chef Anton (il prodotto con ProductID
5).
Figura 5: vengono visualizzate informazioni sulla combinazione Gumbo di Chef Anton (fare clic per visualizzare l'immagine full-size)
Impostazione del valore del parametro sul valore della proprietà di un controllo Web
I valori dei parametri di ObjectDataSource possono essere impostati anche in base al valore di un controllo Web nella pagina. Per illustrare questo problema, è possibile usare GridView che elenca tutti i fornitori che si trovano in un paese o in un'area geografica specificata dall'utente. A questo scopo, aggiungere un controllo TextBox alla pagina in cui l'utente può immettere un nome paese/paese. Impostare la proprietà del ID
controllo TextBox su CountryName
. Aggiungere anche un controllo Web Button.
Figura 6: Aggiungere una casella di testo alla pagina con ID
CountryName
(Fare clic per visualizzare l'immagine a dimensioni complete)
Aggiungere quindi gridView alla pagina e, dallo smart tag, scegliere di aggiungere un nuovo OggettoDataSource. Poiché si desidera visualizzare le informazioni sul fornitore, selezionare la SuppliersBLL
classe dalla prima schermata della procedura guidata. Dalla seconda schermata selezionare il GetSuppliersByCountry(country)
metodo .
Figura 7: Scegliere il metodo (Fare clic per visualizzare l'immagineGetSuppliersByCountry(country)
a dimensioni complete)
Poiché il GetSuppliersByCountry(country)
metodo ha un parametro di input, la procedura guidata include nuovamente una schermata finale per la scelta del valore del parametro. Questa volta impostare l'origine Parametro su Control. Verrà popolato l'elenco a discesa ControlID con i nomi dei controlli nella pagina; selezionare il controllo dall'elenco CountryName
. Quando la pagina viene visitata per la prima volta, CountryName
textBox verrà vuota, quindi non vengono restituiti risultati e non viene visualizzato alcun risultato. Per visualizzare alcuni risultati per impostazione predefinita, impostare di conseguenza la casella di testo DefaultValue.
Figura 8: Impostare il valore del parametro sul valore del CountryName
controllo (fare clic per visualizzare l'immagine a dimensioni complete)
Il markup dichiarativo di ObjectDataSource è leggermente diverso dal primo esempio, usando un oggetto ControlParameter anziché l'oggetto standard Parameter
. Un ControlParameter
ha proprietà aggiuntive per specificare l'oggetto ID
del controllo Web e il valore della proprietà da usare per il parametro (PropertyName
). La procedura guidata Configura origine dati è abbastanza intelligente per determinare che, per un controllo TextBox, è probabile che si voglia usare la Text
proprietà per il valore del parametro. Se, tuttavia, si vuole usare un valore di proprietà diverso dal controllo Web, è possibile modificare il valore qui o facendo clic sul PropertyName
collegamento "Mostra proprietà avanzate" nella procedura guidata.
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
<SelectParameters>
<asp:ControlParameter ControlID="CountryName"
Name="country" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
Quando si visita la pagina per la prima volta che CountryName
TextBox è vuoto. Il metodo ObjectDataSource Select
è ancora richiamato da GridView, ma un valore di null
viene passato al GetSuppliersByCountry(country)
metodo . TableAdapter converte l'oggetto null
in un valore del database NULL
(DBNull.Value
), ma la query usata dal GetSuppliersByCountry(country)
metodo viene scritta in modo che non restituisca alcun valore quando viene specificato un NULL
valore per il @CategoryID
parametro. In breve, non vengono restituiti fornitori.
Dopo che il visitatore entra in un paese, tuttavia, e fa clic sul pulsante Show Suppliers per causare un postback, il metodo ObjectDataSource Select
viene rieseguito, passando il valore del Text
controllo TextBox come country
parametro.
Figura 9: i fornitori del Canada vengono visualizzati (fare clic per visualizzare l'immagine a dimensioni complete)
Visualizzazione predefinita di tutti i fornitori
Anziché visualizzare nessuno dei fornitori quando si visualizza prima la pagina, è possibile visualizzare prima tutti i fornitori, consentendo all'utente di ridimensionare l'elenco immettendo un nome paese/area geografica nella Casella di testo. Quando TextBox è vuoto, il metodo della GetSuppliersByCountry(country)
classe viene passato in un null
valore per il SuppliersBLL
country
relativo parametro di input. Questo null
valore viene quindi passato al metodo dal dal, in cui viene convertito in un valore di GetSupplierByCountry(country)
database NULL
per il @Country
parametro nella query seguente:
SELECT SupplierID, CompanyName, Address, City, Country, Phone
FROM Suppliers
WHERE Country = @Country
L'espressione Country = NULL
restituisce sempre False, anche per i record la cui Country
colonna ha un NULL
valore. Pertanto, non vengono restituiti record.
Per restituire tutti i fornitori quando il paese TextBox è vuoto, è possibile aumentare il metodo nel BLL per richiamare il GetSuppliersByCountry(country)
GetSuppliers()
metodo quando il parametro del paese è null
e chiamare il metodo DAL GetSuppliersByCountry(country)
in caso contrario. Ciò avrà l'effetto di restituire tutti i fornitori quando non viene specificato alcun paese e il subset appropriato di fornitori quando il parametro del paese è incluso.
Modificare il GetSuppliersByCountry(country)
metodo nella SuppliersBLL
classe nel seguente:
public Northwind.SuppliersDataTable GetSuppliersByCountry(string country)
{
if (string.IsNullOrEmpty(country))
return GetSuppliers();
else
return Adapter.GetSuppliersByCountry(country);
}
Con questa modifica la DeclarativeParams.aspx
pagina mostra tutti i fornitori quando viene prima visitata (o ogni volta CountryName
che textBox è vuoto).
Figura 10: tutti i fornitori sono ora visualizzati per impostazione predefinita (fare clic per visualizzare l'immagine a dimensioni complete)
Riepilogo
Per usare metodi con parametri di input, è necessario specificare i valori per i parametri nell'insieme SelectParameters
ObjectDataSource. Diversi tipi di parametri consentono di ottenere il valore del parametro da origini diverse. Il tipo di parametro predefinito usa un valore hardcoded, ma anche facilmente (e senza una riga di codice) è possibile ottenere i valori dei parametri querystring, Variabili sessione, cookie e persino valori immessi dall'utente dai controlli Web nella pagina.
Gli esempi esaminati in questa esercitazione illustrano come usare i valori dei parametri dichiarativi. Tuttavia, potrebbe verificarsi un momento in cui è necessario usare un'origine di parametri non disponibile, ad esempio la data e l'ora correnti oppure, se il sito usava l'appartenenza, l'ID utente del visitatore. Per tali scenari è possibile impostare i valori dei parametri a livello di codice prima del metodo ObjectDataSource richiamando il metodo dell'oggetto sottostante. Verrà illustrato come eseguire questa operazione nell'esercitazione successiva.
Programmazione felice!
Informazioni sull'autore
Scott Mitchell, autore di sette libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, ha lavorato con le tecnologie Microsoft Web dal 1998. Scott lavora come consulente indipendente, allenatore e scrittore. Il suo ultimo libro è Sams Teach Yourself ASP.NET 2,0 in 24 Ore. Può essere raggiunto a mitchell@4GuysFromRolla.com. o tramite il suo blog, che può essere trovato in http://ScottOnWriting.NET.
Grazie speciali
Questa serie di esercitazioni è stata esaminata da molti revisori utili. Il revisore principale per questa esercitazione è stato Hilton Giesenow. Interessati a esaminare i prossimi articoli MSDN? In tal caso, lasciami una riga in mitchell@4GuysFromRolla.com.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per