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.