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

18,009

Solution 1

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!

Solution 2

You have to set AllowCustomPaging="true". And when databinding do:

mygrid.VirtualItemCount = totalRecords;
mygrid.DataSource = mysource;
mygrid.DataBind();

Update 1: Above is for datagrid only. Unfortunately the only supported way to do server side paging with the gridview is implementing an object datasource or implementing a custom datasource. Here is the related msdn doc http://msdn.microsoft.com/en-us/library/5aw1xfh3.aspx.

Update 2: This method now works with GridView as of .Net 4.5

Share:
18,009

Related videos on Youtube

Dan Herbert
Author by

Dan Herbert

I like to code.

Updated on April 15, 2022

Comments

  • Dan Herbert
    Dan Herbert about 2 years

    I'm trying to figure out ASP.NET's GridView 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 GridView'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 GrideView's PageCount 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.

  • Dan Herbert
    Dan Herbert about 15 years
    VirtualItemCount only works with DataGrid controls. On a GridView, this property doesn't exist, otherwise I'd use it.
  • eglasius
    eglasius about 15 years
    @Dan you are correct, I added an update about it - basically you are forced to go with the objectdatasource or a custom datasource. Added a link to the msdn doc.
  • sparebytes
    sparebytes about 10 years
    This property seems to exist on GridView as of .Net 4.5 msdn