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
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Usare le navigation property in QuickGrid di Blazor
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Utilizzare QuickGrid di Blazor con Entity Framework
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Effettuare il binding di date in Blazor
Change tracking e composition in Entity Framework
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Filtering sulle colonne in una QuickGrid di Blazor
I più letti di oggi
- Mantenere l'applicazione attiva anche con il lock screen attivo
- Mono: primo supporto per ASP.NET
- Mono 0.26 con supporto alla 1.1
- MS03-45: risolti i problemi della patch 824141
- Mono 1.1.13: anche IronPython!
- UI responsive e moderne con Bootstrap
- WinRT: sviluppare per Windows 8 e Windows RT
- Realizzare un filtro su un intervallo di date con QueryExtender e ASP.NET 4.0
- Migliorare le performance di ASP.NET Core 2.2 su IIS
- Rigenerare il database negli integration test di ASP.NET Core