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
Scoprire le ottimizzazioni di Entity Framework Core in fase di scrittura di un solo record
Sfruttare i tag nell'output cache di ASP.NET Core 7
Definire le impostazioni di cache a livello di controller in ASP.NET Core 7
Migliorare la scalabilità di ASP.NET Core 7 grazie all'output cache
Utilizzare la libreria EntityFrameworkCore.Exceptions per gestire le eccezioni di Entity Framework Core in modo tipizzato
Gestire tipi complessi in query string grazie a IParsable in ASP.NET Core 7.0
Utilizzare parametri a livello di controller nel routing di ASP.NET Core
Definire una tabella come memory optimized su Sql Server tramite EF Core
Definire la durata dell'output cache in ASP.NET Core 7
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Migrare un progetto ASP.NET Core da .NET 6 a .NET 7
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Effettuare update massivi con Entity Framework Core 7
- Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
- Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
- PWAConf 2020 - Online
- Visual Studio 2010 è realtà
- Proteggersi dagli attacchi di Open Redirect in ASP.NET Core MVC
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!