Condividi tramite


Parametri dichiarativi (VB)

di Scott Mitchell

Scarica PDF

In questo tutorial illustreremo come usare un insieme di parametri con un valore codificato fisso 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 metodo GetProducts() restituisce un DataTable fortemente tipizzato, popolato con tutti i record dalla tabella Products del database Northwind. La ProductsBLL classe contiene metodi aggiuntivi per restituire solo subset 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.

ObjectDataSource può essere usato per richiamare 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 provenire da un'ampia gamma di origini dinamiche, tra cui valori di querystring, variabili di sessione, valore della proprietà di un controllo Web nella pagina o altri.

Per questa esercitazione si inizierà illustrando come usare un parametro impostato su un valore hardcoded. In particolare, esamineremo l'aggiunta di un controllo DetailsView alla pagina che visualizza informazioni su un prodotto specifico, vale a dire Chef Anton's Gumbo Mix, che ha un ProductID valore pari a 5. Si vedrà quindi 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 di che è possibile fare clic su un pulsante per visualizzare l'elenco dei fornitori che risiedono in tale paese o area geografica.

Uso di un valore di parametro codificato fisso

Per il primo esempio, iniziare aggiungendo un controllo DetailsView alla DeclarativeParams.aspx pagina nella BasicReporting cartella . Dallo smart tag di DetailsView, selezionare <Nuova origine dati> dall'elenco a discesa e scegliere di aggiungere un ObjectDataSource.

Aggiungere un oggetto ObjectDataSource alla pagina

Figura 1: Aggiungere objectDataSource alla pagina (fare clic per visualizzare l'immagine a dimensione intera)

Verrà avviata automaticamente la procedura guidata "Scegli Origine Dati" del controllo ObjectDataSource. Selezionare la ProductsBLL classe nella prima schermata della procedura guidata.

Selezionare la classe ProductsBLL

Figura 2: Selezionare la classe (fare clic per visualizzare l'immagine ProductsBLLa dimensione intera)

Poiché si vogliono visualizzare informazioni su un particolare prodotto che si vuole usare il GetProductByProductID(productID) metodo .

Scegliere il metodo GetProductByProductID(productID)

Figura 3: Scegliere il GetProductByProductID(productID) metodo (fare clic per visualizzare l'immagine a dimensione intera)

Poiché il metodo selezionato include un parametro, è disponibile un'altra schermata 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 parametri enumera le varie origini possibili per il valore del parametro. Poiché si vuole specificare un valore predefinito pari a 5 per il parametro productID, lasciare l'origine parametro come Nessuno e immettere 5 nella casella di testo Valore predefinito.

Verrà usato un valore di parametro hardcoded pari a 5 per il parametro productID

Figura 4: Verrà usato un valore di parametro hardcoded pari a 5 per il parametro (fare clic per visualizzare l'immagine productIDa dimensione intera)

Dopo aver completato la procedura guidata Configura Origine Dati, il markup dichiarativo del controllo ObjectDataSource include un Parameter oggetto nella SelectParameters raccolta per ogni 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, è presente una sola voce qui. La raccolta SelectParameters può contenere qualsiasi classe che deriva dalla classe Parameter nello spazio dei nomi System.Web.UI.WebControls. Per i valori dei parametri hardcoded viene usata la classe base Parameter , ma per le altre opzioni di origine dei parametri viene usata una classe derivata Parameter . Se necessario, è anche possibile creare tipi di parametri personalizzati.

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
    <SelectParameters>
        <asp:Parameter DefaultValue="5"
           Name="productID" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

Nota

Se stai seguendo sul tuo computer, il markup dichiarativo visualizzato a questo punto può includere valori per le proprietà InsertMethod, UpdateMethod e DeleteMethod, nonché DeleteParameters. La procedura guidata Scegli origine dati di ObjectDataSource specifica automaticamente i metodi da ProductBLL da usare per l'inserimento, l'aggiornamento e l'eliminazione; quindi, a meno che non vengano esplicitamente cancellati, verranno inclusi nel markup sopra.

Quando si visita questa pagina, il controllo Web dei dati richiamerà il metodo Select della ObjectDataSource, che a sua volta chiamerà il metodo GetProductByProductID(productID) della classe ProductsBLL usando il valore codificato in modo fisso pari a 5 per il parametro di input productID. Il metodo restituirà un oggetto fortemente tipizzato ProductDataTable che contiene una singola riga con informazioni su Chef Anton's Gumbo Mix (il prodotto con ProductID 5).

Vengono visualizzate informazioni sul mix Gumbo di Chef Anton

Figura 5: Vengono visualizzate informazioni sulla combinazione Gumbo di Chef Anton (fare clic per visualizzare l'immagine a dimensione intera)

Impostazione del valore del parametro al 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, consideriamo un GridView che elenca tutti i fornitori situati in un paese specificato dall'utente. Per raggiungere questo obiettivo, aggiungere un TextBox alla pagina in cui l'utente può immettere un nome di paese. Impostare la proprietà del controllo TextBox ID su CountryName. Aggiungere anche un controllo Web di tipo Button.

Aggiungi una TextBox alla pagina con ID CountryName

Figura 6: Aggiungere un controllo TextBox alla pagina con IDCountryName (fare clic per visualizzare l'immagine a dimensione intera)

Quindi, aggiungi un controllo GridView alla pagina e, dallo smart tag, scegli di aggiungere un nuovo ObjectDataSource. Poiché si vogliono visualizzare le informazioni sul fornitore, selezionare la SuppliersBLL classe dalla prima schermata della procedura guidata. Nella seconda schermata selezionare il GetSuppliersByCountry(country) metodo .

Scegliere il metodo GetSuppliersByCountry(country)

Figura 7: Scegliere il GetSuppliersByCountry(country) metodo (fare clic per visualizzare l'immagine a dimensione intera)

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 Origine parametro su Controllo. Verrà popolato il menu a tendina ControlID con i nomi dei controlli nella pagina; selezionare il controllo CountryName dall'elenco. Quando la pagina viene visitata per la prima volta, TextBox CountryName sarà 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.

Impostare il valore del parametro sul valore del controllo CountryName

Figura 8: Impostare il valore del parametro sul valore del controllo (fare clic per visualizzare l'immagine CountryNamea dimensione intera)

Il markup dichiarativo di ObjectDataSource è leggermente diverso dal primo esempio, usando controlParameter anziché l'oggetto standardParameter. Un ControlParameter oggetto dispone di proprietà aggiuntive per specificare l'oggetto ID del controllo Web e il valore della proprietà da utilizzare per il parametro (PropertyName). La procedura guidata Configura origine dati è stata sufficientemente intelligente da determinare che, per un controllo TextBox, utilizzeremo probabilmente la Text proprietà come valore del parametro. Se, tuttavia, si desidera utilizzare un valore di proprietà diverso dal controllo Web, è possibile modificare il PropertyName valore qui o facendo clic sul 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, il CountryName TextBox è vuoto. Il metodo ObjectDataSource Select viene ancora richiamato da GridView, ma viene passato un valore di Nothing nel GetSuppliersByCountry(country) metodo . TableAdapter converte in Nothing un valore di database NULL (DBNull.Value), ma la query usata dal GetSuppliersByCountry(country) metodo viene scritta in modo che non restituisca valori quando viene specificato un NULL valore per il @CategoryID parametro . In breve, non vengono restituiti fornitori.

Una volta che il visitatore entra in un paese/regione e poi fa clic sul pulsante Mostra fornitori per generare un postback, il metodo ObjectDataSource Select viene rieseguito, passando il valore del controllo TextBox Text come parametro country.

Tali fornitori provenienti dal Canada sono visualizzati

Figura 9: Vengono visualizzati i fornitori del Canada (fare clic per visualizzare l'immagine a dimensione intera)

Visualizzazione di tutti i fornitori per impostazione predefinita

Invece di mostrare nessuno dei fornitori quando si visualizza per la prima volta la pagina, è possibile che tutti i fornitori vengano visualizzati in un primo momento, consentendo all'utente di abbassare l'elenco immettendo un nome di paese nel controllo TextBox. Quando TextBox è vuoto, il metodo della classe SuppliersBLLGetSuppliersByCountry(country) viene passato nel Nothing per il parametro di input country. Questo Nothing valore viene quindi passato al metodo del GetSupplierByCountry(country) della DAL, in cui viene convertito in un valore di database NULL per il parametro @Country 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 la TextBox paese è vuota, possiamo modificare il metodo GetSuppliersByCountry(country) nel BLL per richiamare il metodo GetSuppliers() quando il parametro paese è Nothing e richiamare invece il metodo GetSuppliersByCountry(country) del DAL in caso contrario. Questo avrà l'effetto di restituire tutti i fornitori quando non viene specificato alcun paese e il subset appropriato di fornitori quando il parametro paese è incluso.

Modificare il GetSuppliersByCountry(country) metodo nella SuppliersBLL classe come segue:

Public Function GetSuppliersByCountry(country As String) _
    As Northwind.SuppliersDataTable
    If String.IsNullOrEmpty(country) Then
        Return GetSuppliers()
    Else
        Return Adapter.GetSuppliersByCountry(country)
    End If
End Function

Con questa modifica la DeclarativeParams.aspx pagina mostra tutti i fornitori quando vengono visitati per la prima volta (o ogni volta che textBox CountryName è vuoto).

Tutti i fornitori sono ora visualizzati per impostazione predefinita

Figura 10: Tutti i fornitori sono ora visualizzati per impostazione predefinita (fare clic per visualizzare l'immagine a dimensione intera)

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 altrettanto facilmente (e senza una riga di codice) i valori dei parametri possono essere ottenuti dalla stringa di query, dalle variabili di sessione, dai cookie e persino dai valori immessi dall'utente dai controlli Web nella pagina.

Negli esempi esaminati in questa esercitazione è stato illustrato come usare i valori dei parametri dichiarativi. Tuttavia, potrebbero verificarsi momenti in cui è necessario usare un'origine di parametri non disponibile, ad esempio la data e l'ora correnti oppure, se il sito usa l'appartenenza, l'ID utente del visitatore. Per questi scenari è possibile impostare i valori dei parametri a livello di codice prima di richiamare il metodo dell'oggetto sottostante a ObjectDataSource. Si vedrà come eseguire questa operazione nell'esercitazione successiva.

Buon programmatori!

Informazioni sull'autore

Scott Mitchell, autore di sette libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, ha lavorato con le tecnologie Web Microsoft dal 1998. Scott lavora come consulente indipendente, formatore e scrittore. Il suo ultimo libro è Sams Teach Yourself ASP.NET 2.0 in 24 ore. Può essere raggiunto a mitchell@4GuysFromRolla.com.

Grazie speciale a

Questa serie di esercitazioni è stata esaminata da diversi revisori validi. Il revisore principale per questa esercitazione era Hilton Giesenow. Si è interessati a esaminare i prossimi articoli MSDN? In tal caso, mandami un messaggio a mitchell@4GuysFromRolla.com.