Il controllo LinqDataSource consente l'utilizzo di LINQ (Language Integrated Query) sfruttando semplice markup per interrogare, aggiungere, modificare o eliminare elmenti di una qualsiasi collezione di oggetti, che utilizzando LINQ to SQL vengono persistiti su un database SQL Server.
In particolare attraverso la proprietà Where è possibile specificare le condizioni da soddisfare per la selezione dalla sorgente dati.
Nel nostro esempio impostando la proprietà AutoGenerateWhereClause a true, la clausola Where è generata dinamicamente in base al contenuto della collezione WhereParameters, concatenando con l'operatore "AND" i vari campi e confrontando i rispettivi valori applicando sempre la condizione di uguaglianza.
In alcuni casi può essere necessario modificare a runtime la clausola Where per escludere uno o più criteri, in modo da estendere la ricerca.
Prendiamo ad esempio un LinqDataSource così configurato:
<asp:LinqDataSource ID="RentListLinqDataSource" runat="server" ContextTypeName="MyDataContext" TableName="Rents" AutoGenerateWhereClause="true" OnSelecting="RentListLinqDataSource_Selecting">
<WhereParameters>
<asp:ControlParameter ControlID="RentLocationDropDownList" Name="RentLocationID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="RentTypeDropDownList" Name="RentTypeID" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="RifTextBox" Name="Rif" Type="String" />
</WhereParameters>
</asp:LinqDataSource>Per modificare la clausola Where ed i criteri di selezione è sufficente creare un event handler per l'evento Selecting e modificare, rimovendo uno o più parametri dalla collezione WhereParameters, tale collezione che è passata come argomento al metodo mediante LinqDataSourceSelectEventArgs.
Non è necessario fare altro poiché sarà il LinqDataSource a generare la clausola Where in base ai parametri rimasti.
protected void RentListLinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
// azzero i parametri
if (RentLocationDropDownList.SelectedValue == "0" & RentTypeDropDownList.SelectedValue == "0" & string.IsNullOrEmpty(RifTextBox.Text.Trim()))
{
e.WhereParameters.Clear();
return;
}
//non è necessario filtrare per il tipo
if (RentTypeDropDownList.SelectedValue == "0")
{
e.WhereParameters.Remove("RentTypeID");
}
//non è necessario filtrare per la collocazione
if (RentLocationDropDownList.SelectedValue == "0")
{
e.WhereParameters.Remove("RentLocationID");
}
//non è necessario filtrare per il riferiemtno
if ( string.IsNullOrEmpty(RifTextBox.Text.Trim()))
{
e.WhereParameters.Remove("Rif");
}
}Nell'esempio precedete sono rimossi uno o più parametri dalla collezione WhereParameters in base a i valori immessi nell'interfaccia di ricerca, composta da due DropDownList ed una TextBox.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Gli oggetti CallOut di Expression Blend 4.0
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform
- Sfruttare una CDN con i bundle di ASP.NET
- Utilizzare un DataContext specifico per la modalità design time di Blend e Visual Studio nei controlli Silverlight
- Utilizzare dati in formato XML in XAML


