Dan Herbert Dan Herbert -4 years ago 65
C# Question

Manually setting a GridView's PageCount when DataSource doesn't return full result set?

I'm trying to figure out ASP.NET's

pagination mechanics so I can use the framework's native functionality instead of my company's home-brewed manual pagination routines which take a lot of work to implement.

I've figured out everything except how get the
's PageCount property to work with our web services. Currently, our web services return the total record count like the following:

public object[] GetStuffMethod(int pageNum, int recordsPerPage, out int totalRecords)

This works fine with a GridView, however the documentation I've found says that the
property is generated from the total records in the DataSource. Is there really no way to set the PageCount based on something else other than returning all of the records?

There could be tens of thousands of records in my data source so I'd rather not select all of them just to make the GridView's page count work. I probably could just ignore the GridView's page count and calculate it on my own, but if the framework has a way to do this, I'd rather use it.

Answer Source

I strongly recommend that you go the ObjectDataSource route.

If you are unfamiliar with this approach here are the basics:

1) Instead of manually setting the grid.DataSource property in the code behind, you add an extra element to the page . You set the DataSourceID of the grid to the id of your ObjectDataSource.

2) This is where you get real control. You create a new class and give it two functions "SelectRows()" and "GetCount()". You can put your logic in both functions and optimize to your heart's content. Feel free to use web services if that's what you need to work with, but under this method, you can call one to return rows and other to return the count.

3) use the ObjectDataSource's property editor to connect it to your class and enable paging. You're all set!

I strongly suggest you check out The Code Project's Example of using ObjectDataSource and GridView as this is clearly the intended way to support what you want.

Good luck!

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download