Condividi tramite


Impostazione a livello di programmazione dei valori dei parametri di ObjectDataSource (VB)

di Scott Mitchell

Scaricare il PDF

In questa esercitazione si esaminerà l'aggiunta di un metodo a DAL e BLL che accetta un singolo parametro di input e restituisce i dati. L'esempio imposta questo parametro a livello di codice.

Introduzione

Come illustrato nell'esercitazione precedente, sono disponibili diverse opzioni per passare in modo dichiarativo i valori dei parametri ai metodi di ObjectDataSource. Se il valore del parametro è predefinito, proviene da un controllo Web nella pagina o si trova in qualsiasi altra origine leggibile, come ad esempio da un oggetto dati Parameter, tale valore può essere associato al parametro di input senza scrivere una riga di codice.

Tuttavia, in alcuni casi, quando il valore del parametro proviene da un'origine non già considerata da uno degli oggetti dati predefiniti Parameter. Se il nostro sito supportasse gli account utente, potremmo voler impostare il parametro in base all'ID utente del visitatore attualmente connesso. In alternativa, potrebbe essere necessario personalizzare il valore del parametro prima di inviarlo al metodo dell'oggetto sottostante di ObjectDataSource.

Ogni volta che il metodo Select di ObjectDataSource viene richiamato, prima ObjectDataSource genera l'evento Selecting. Viene quindi richiamato il metodo dell'oggetto sottostante di ObjectDataSource. Una volta completato, viene generato l'evento Selected di ObjectDataSource (la Figura 1 illustra questa sequenza di eventi). I valori dei parametri passati al metodo dell'oggetto sottostante di ObjectDataSource possono essere impostati o personalizzati in un gestore eventi per l'evento Selecting .

Gli eventi Select e Selecting dell'ObjectDataSource vengono attivati prima e dopo che viene richiamato il metodo dell'oggetto sottostante

Figura 1: Gli eventi di Selected e Selecting dell'ObjectDataSource vengono attivati prima e dopo che il metodo dell'oggetto sottostante viene richiamato (fare clic per visualizzare l'immagine a dimensione intera)

In questa esercitazione esamineremo l'aggiunta di un metodo ai nostri DAL e BLL che accetta un singolo parametro di input Month, di tipo Integer, e restituisce un oggetto EmployeesDataTable popolato con quei dipendenti che hanno l'anniversario dell'assunzione nel periodo specificato Month. Questo esempio imposta questo parametro a livello di codice in base al mese corrente, che mostra un elenco di "Anniversari dipendenti questo mese".

È ora di iniziare.

Passaggio 1: Aggiunta di un metodo aEmployeesTableAdapter

Per il primo esempio è necessario aggiungere un mezzo per recuperare quei dipendenti il cui HireDate si è verificato in un mese specifico. Per fornire questa funzionalità in base all'architettura, è prima necessario creare un metodo in EmployeesTableAdapter che esegue il mapping all'istruzione SQL appropriata. Per farlo, inizia aprendo il DataSet tipizzato Northwind. Fare clic con il pulsante destro del mouse sull'etichetta EmployeesTableAdapter e scegliere Aggiungi query.

Aggiungere una nuova query al EmployeesTableAdapter

Figura 2: Aggiungere una nuova query aEmployeesTableAdapter (Fare clic per visualizzare l'immagine a dimensione intera)

Scegliere di aggiungere un'istruzione SQL che restituisca righe. Quando si raggiunge la schermata Specifica un'SELECT istruzione, l'istruzione predefinita SELECT per EmployeesTableAdapter verrà già caricata. È sufficiente aggiungere nella WHERE clausola : WHERE DATEPART(m, HireDate) = @Month. DATEPART è una funzione T-SQL che restituisce una determinata parte di data di un datetime tipo. In questo caso viene usato DATEPART per restituire il mese della HireDate colonna.

Restituisci solo le righe in cui la colonna HireDate è minore o uguale al parametro @HiredBeforeDate " />

Figura 3: Restituire solo le righe in cui la HireDate colonna è minore o uguale al parametro (@HiredBeforeDate a dimensione intera)

Modificare infine i nomi dei FillBy metodi e GetDataBy rispettivamente in FillByHiredDateMonth e GetEmployeesByHiredDateMonth.

Scegliere nomi di metodi più appropriati rispetto a FillBy e GetDataBy

Figura 4: Scegliere nomi di metodi più appropriati rispetto FillBy a e GetDataBy (fare clic per visualizzare l'immagine a dimensione intera)

Cliccare su Fine per completare il wizard e tornare all'area di progettazione del DataSet. EmployeesTableAdapter Dovrebbe ora includere un nuovo set di metodi per l'accesso ai dipendenti assunti in un mese specificato.

I nuovi metodi vengono visualizzati nell'area di progettazione di DataSet

Figura 5: I nuovi metodi vengono visualizzati nell'area di progettazione di DataSet (fare clic per visualizzare l'immagine a dimensione intera)

Passaggio 2: Aggiunta delGetEmployeesByHiredDateMonth(month)metodo al livello della logica aziendale

Poiché l'architettura dell'applicazione utilizza un livello separato per la logica di business e la logica di accesso ai dati, è necessario aggiungere un metodo al BLL che chiama il DAL per recuperare i dipendenti assunti prima di una data specifica. Aprire il EmployeesBLL.vb file e aggiungere il metodo seguente:

<System.ComponentModel.DataObjectMethodAttribute _
    (System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
    As Northwind.EmployeesDataTable
    Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function

Come con gli altri metodi in questa classe, GetEmployeesByHiredDateMonth(month) chiama semplicemente il DAL e restituisce i risultati.

Passaggio 3: Visualizzazione dei dipendenti il cui anniversario dell'assunzione è questo mese

Il nostro passaggio finale per questo esempio consiste nel visualizzare i dipendenti il cui anniversario di assunzione è questo mese. Per iniziare, aggiungere un controllo GridView nella pagina ProgrammaticParams.aspx all'interno della cartella BasicReporting e aggiungere un nuovo ObjectDataSource come origine dati. Configurare ObjectDataSource per l'uso della EmployeesBLL classe con l'oggetto SelectMethod impostato su GetEmployeesByHiredDateMonth(month).

Usare la classe EmployeesBLL

Figura 6: Usa la EmployeesBLL classe (fare clic per visualizzare l'immagine a dimensione intera)

Selezionare dal metodo GetEmployeesByHiredDateMonth(month)

Figura 7: Selezionare dal GetEmployeesByHiredDateMonth(month) metodo (fare clic per visualizzare l'immagine a dimensione intera)

La schermata finale chiede di fornire l'origine del month valore del parametro. Poiché questo valore verrà impostato programmaticamente, lasciare l'opzione Origine parametro impostata su Nessuno e fare clic su Fine.

Lasciare l'opzione Origine parametro impostata su Nessuno

Figura 8: Lasciare la Fonte del parametro impostata su Nessuno (fare clic per visualizzare l'immagine nelle sue dimensioni originali)

Verrà creato un Parameter oggetto nell'insieme SelectParameters ObjectDataSource che non ha un valore specificato.

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    OldValuesParameterFormatString="original_{0}"
    SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
    <SelectParameters>
        <asp:Parameter Name="month" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

Per impostare questo valore a livello di codice, è necessario creare un gestore eventi per l'evento Selecting ObjectDataSource. A tale scopo, passare alla visualizzazione Progettazione e fare doppio clic su ObjectDataSource. In alternativa, selezionare ObjectDataSource, passare alla finestra Proprietà e fare clic sull'icona del fulmine. Fare quindi doppio clic nella casella di testo accanto all'evento Selecting o digitare il nome del gestore eventi che si desidera utilizzare. Come terza opzione, è possibile creare il gestore eventi selezionando ObjectDataSource e il relativo Selecting evento dai due elenchi a discesa nella parte superiore della classe code-behind della pagina.

Fare clic sull'icona Lightning Bolt nella finestra Proprietà per elencare gli eventi di un controllo Web

Figura 9: Fare clic sull'icona a forma di fulmine nella finestra Proprietà per elencare gli eventi di un controllo Web

Tutti e tre gli approcci aggiungono un nuovo gestore eventi per l'evento Selecting objectDataSource alla classe code-behind della pagina. In questo gestore di eventi è possibile leggere e scrivere nei valori dei parametri usando e.InputParameters(parameterName), in cui parameterName è il valore dell'attributo Name nell'elemento <asp:Parameter> (la raccolta InputParameters può anche essere indicizzata in modo ordinale, come in e.InputParameters(index)). Per impostare il month parametro sul mese corrente, aggiungere quanto segue al Selecting gestore eventi:

Protected Sub ObjectDataSource1_Selecting _
    (sender As Object, e As ObjectDataSourceSelectingEventArgs) _
        Handles ObjectDataSource1.Selecting
    e.InputParameters("month") = DateTime.Now.Month
End Sub

Quando visitiamo questa pagina attraverso un browser possiamo vedere che solo un dipendente è stato assunto questo mese (marzo) Laura Callahan, che è stato con l'azienda dal 1994.

Quei dipendenti i cui anniversari questo mese sono mostrati

Figura 10: i dipendenti i cui anniversari questo mese sono visualizzati (fare clic per visualizzare l'immagine a dimensione intera)

Riassunto

Anche se i valori dei parametri di ObjectDataSource possono in genere essere impostati in modo dichiarativo, senza richiedere una riga di codice, è facile impostare i valori dei parametri a livello di codice. È sufficiente creare un gestore eventi per l'evento ObjectDataSource, che viene generato prima che venga richiamato il metodo dell'oggetto Selecting sottostante e impostare manualmente i valori per uno o più parametri tramite l'insieme InputParameters .

Questa esercitazione conclude la sezione Report di base. L'esercitazione successiva avvia la sezione Filtri e Scenari di Master-Details, in cui esamineremo le tecniche per consentire al visitatore di filtrare i dati e analizzare in dettaglio da un report principale a un report dettagliato.

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 molti revisori competenti. Il revisore principale per questo tutorial è stato Hilton Giesenow. Si è interessati a esaminare i prossimi articoli MSDN? In tal caso, mandami un messaggio a mitchell@4GuysFromRolla.com.