I can't see the page load event handler, and another problem is not binding the GridView after the post-back. I see that you are setting the page size to 3, and that you are binding the grid after changing the PageIndex property, which would have been my guess. The SqlDataSource control automatically coordinates paging with the GridView, but when you handle it manually, it needs to be handled correctly. I used to do a get from the database on initial page load into a DataTable, and then store that into a session variable that could be retrieved on post-back, so that I didn't have to do a get again. I never bind a data reader to the GridView, though, so there is another possibility for a problem, since a data reader gives you a forward-only view of the data. Paging may require a different construct.