I’m populating a GridView with code, setting datasource to the dataset returned by a query. So apparently sorting and paging don’t just work magically like if I use a datasourceid= some sqldatasource.
I’ve found a number of examples of how to do this on the web, but they all appear to re-execute the query every time. Shouldn’t the contents of the query be saved in the view state? Is there some way to just get the previous query results and re-sort without having to go back to the database? (Is it saving all the data in the view state? If so, why can’t I get to it? It seems pretty dumb to send it all to the user’s browser and send it all back, wasting all the bandwidth, if there’s no way to get to it.)
Also, if I try to allow paging, it appears I again have to re-execute the query every time the user goes to another page. And if the user sorts and then pages, then I have to remember what the sort order was in a hidden field or some such, so I can re-read the data, re-sort, and then go to the right page.
Given that when you use a data source control all this behavior is built in, I think I’m missing something here. But given all the examples out there that do it this slow, hard way, if I’m missing something, a lot of other programmers are missing it, too.
If you’re using an ASP.NET GridView control every time you sort a column or page through the data set then you’re making a server postback. Sorting and paging with this particular control has never worked ‘magically’ and has long been a bugbear of mine.
You can speed things up by storing the data source that you’re building the grid from in memory, either as a session or through the ViewState. Both have pros and cons and I suggest you read up.
If at all possible I suggest forgetting the ASP.NET GridView and looking at a client side solution such as the jQuery jqGrid. It uses AJAX calls to sort and page and is much, much faster and less of a headache. The only drawback is the learning curve but believe me it’s worth it in the long run.