Il nuovo controllo QueryExtender di ASP.NET 4.0 consente di applicare filtri e ordinamenti in maniera dinamica ad un controllo datasource basato su LINQ, come EntityDataSource o LinqDataSource.
Supponiamo ad esempio di visualizzare in una GridView una serie di ordini utilizzando una EntityDataSource, come mostrato nel codice seguente.
Da: <asp:TextBox runat="server" ID="fromDate" /> a: <asp:TextBox runat="server" ID="toDate" /> <asp:Button runat="server" ID="btn" Text="Filtra" /> <asp:GridView runat="server" ID="theGrid" DataSourceID="dataSource" /> <asp:EntityDataSource runat="server" ID="dataSource" EntitySetName="Orders" ContextTypeName="WebApplication1.NorthwindEntities" />
Come possiamo notare, il markup include anche una coppia di TextBox tramite cui l'utente può eventualmetne indicare un intervallo date in base al quale filtrare gli ordini mostrati. Questa logica può essere facilmente implementata in maniera dichiarativa (e quindi senza necessità di intercettare eventi nel code-behind) con l'ausilio di un QueryExtender:
<asp:QueryExtender runat="server" ID="queryExtender" TargetControlID="dataSource"> <asp:RangeExpression DataField="OrderDate" MinType="Inclusive" MaxType="Inclusive"> <asp:ControlParameter ControlID="fromDate" /> <asp:ControlParameter ControlID="toDate" /> </asp:RangeExpression> </asp:QueryExtender>
In esso abbiamo specificato di voler agganciare ulteriori logiche al controllo DataSource presente in pagina (proprietà TargetControlID) e utilizzato un RangeExpression collegato alle due TextBox per impostare i valori del range. Il Button è necessario solo per effettuare un postback così che le condizioni di filtro possano essere nuovamente valutate.
Vale la pena sottolineare come, grazie all'engine di Linq To Entities, il filtro venga effettivamente attuato lato database generando una oppurtuna condizione di where nella query, come possiamo facilmente verificare tramite Sql Server Profiler.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Effettuare il binding di date in Blazor
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Eseguire una GroupBy per entity in Entity Framework
Short-circuiting della Pipeline in ASP.NET Core
Load test di ASP.NET Core con k6
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Implementare il throttling in ASP.NET Core
I più letti di oggi
- Elencare gli utenti di un dominio NT con ADSI
- Creare un messaggio di posta in diversi formati con ASP.NET 2.0
- Utilizzare SQL e #linq per eseguire una query con #entityframework Core https://aspit.co/bfv di @sm15455 #efcore1
- Utilizzare il metodo reduce in #javascript https://aspit.co/ccc di @morwalpiz
- Disponibile il codice sorgente di ASP.NET MVC
- rilasciati nuovi template per la #aspnet web pages. funzionano anche con #webmatrix: http://u.aspitalia.com/lu