Condividi tramite


Impostazione a livello di programmazione dei valori dei parametri di ObjectDataSource (C#)

di Scott Mitchell

Scarica 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 imposterà 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 è hardcoded, proviene da un controllo Web nella pagina o si trova in qualsiasi altra origine leggibile da un oggetto origine Parameter dati, ad esempio, tale valore può essere associato al parametro di input senza scrivere una riga di codice.

In alcuni casi, tuttavia, quando il valore del parametro proviene da un'origine non già considerata da uno degli oggetti origine Parameter dati predefiniti. Se l'account utente supportato dal sito potrebbe essere necessario impostare il parametro in base all'ID utente attualmente connesso al visitatore. 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 ObjectDataSource Select viene richiamato, ObjectDataSource genera innanzitutto l'evento Selecting. Viene quindi richiamato il metodo dell'oggetto sottostante di ObjectDataSource. Al termine dell'attivazione dell'evento Selected di ObjectDataSource (figura 1 viene illustrata 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 .

L'oggetto ObjectDataSource selezionato e la selezione di eventi vengono attivati prima e dopo la chiamata del metodo dell'oggetto sottostante

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

In questa esercitazione si esaminerà l'aggiunta di un metodo a DAL e BLL che accetta un singolo parametro Monthdi input , di tipo int e restituisce un EmployeesDataTable oggetto popolato con i dipendenti che hanno l'anniversario dell'assunzione nell'oggetto specificato Month. Questo esempio imposterà questo parametro a livello di codice in base al mese corrente, che mostra un elenco di "Anniversari dipendenti questo mese".

È possibile iniziare subito.

Passaggio 1: Aggiunta di un metodo aEmployeesTableAdapter

Per il primo esempio è necessario aggiungere un mezzo per recuperare i dipendenti i cui HireDate dipendenti si sono verificati in un mese specificato. Per fornire questa funzionalità in base all'architettura, è prima necessario creare un metodo in EmployeesTableAdapter che esegue il mapping all'istruzione SQL appropriata. A tale scopo, iniziare aprendo l'oggetto DataSet tipizzato Northwind. Fare clic con il pulsante destro del mouse sull'etichetta EmployeesTableAdapter e scegliere Aggiungi query.

Aggiungere una nuova query a EmployeesTableAdapter

Figura 2: Aggiungere una nuova query a (fare clic per visualizzare l'immagineEmployeesTableAdapter a dimensione intera)

Scegliere di aggiungere un'istruzione SQL che restituisce righe. Quando si raggiunge la schermata Specifica un'istruzioneSELECT, verrà già caricata l'istruzione predefinita SELECT per .EmployeesTableAdapter È 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.

Restituisce solo le righe in cui la colonna HireDate è minore o uguale alla classe <span class=@HiredBeforeDate Parameter" />

Figura 3: Restituire solo le righe in cui la HireDate colonna è minore o uguale al @HiredBeforeDate parametro (fare clic per visualizzare l'immagine a dimensione intera)

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

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)

Fare clic su Fine per completare la procedura guidata e tornare all'area di progettazione di DataSet. EmployeesTableAdapter Deve 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 del dataset

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

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

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

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)
{
    return Adapter.GetEmployeesByHiredDateMonth(month);
}

Come per gli altri metodi in questa classe, GetEmployeesByHiredDateMonth(month) chiama semplicemente dal dal e restituisce i risultati.

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

Il passaggio finale di questo esempio consiste nel visualizzare i dipendenti il cui anniversario dell'assunzione è questo mese. Per iniziare, aggiungere un controllo GridView alla ProgrammaticParams.aspx pagina nella BasicReporting cartella 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: Usare la classe (fare clic per visualizzare l'immagineEmployeesBLL 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 specificare l'origine month del valore del parametro. Poiché questo valore verrà impostato a livello di codice, lasciare l'opzione Origine parametro impostata sull'opzione None predefinita e fare clic su Fine.

Lasciare l'opzione Origine parametro impostata su Nessuno

Figura 8: Lasciare l'origine dei parametri impostata su Nessuno (fare clic per visualizzare l'immagine a dimensione intera)

Verrà creato un Parameter oggetto nell'insieme ObjectDataSource che non dispone di SelectParameters 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 ObjectDataSource Selecting . 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 a forma di fulmine. Fare quindi doppio clic nella casella di testo accanto all'evento Selecting o digitare il nome del gestore eventi che si vuole usare.

Fare clic sull'icona a forma di fulmine 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

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

protected void ObjectDataSource1_Selecting
    (object sender, ObjectDataSourceSelectingEventArgs e)
{
    e.InputParameters["month"] = DateTime.Now.Month;
}

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

I dipendenti i cui anniversari sono mostrati in questo mese

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

Riepilogo

Anche se i valori dei parametri di ObjectDataSource possono essere in genere 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 Creazione di report di base. L'esercitazione successiva avvia la sezione Filtri e scenari di Master-Details, in cui verranno esaminate le tecniche per consentire al visitatore di filtrare i dati ed eseguire il drill-down da un report master in un report dettagli.

Buon programmatori!

Informazioni sull'autore

Scott Mitchell, autore di sette libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, lavora 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 all'indirizzo mitchell@4GuysFromRolla.com. o tramite il suo blog, disponibile all'indirizzo http://ScottOnWriting.NET.

Grazie speciale a

Questa serie di esercitazioni è stata esaminata da molti revisori utili. Il revisore principale di questa esercitazione era Hilton Giesenow. Si è interessati a esaminare i prossimi articoli MSDN? In tal caso, rilasciami una riga in mitchell@4GuysFromRolla.com.