views:

2846

answers:

2

I have a gridview that has its DataSourceID property set to a custom ObjectDataSource object. When AllowPaging is set to True, the GridView disappears after a postback. If I set AllowPaging to False it's fine. Can someone shed some light on this for me? :)

Edit: The other thing I'm confused about is I thought that if you set the DataSourceID that the grid would get data from the datasource whenever it needed it. If the grid is disappearing because it's not holding the data, why isn't the gridview getting the data it needs from the datasource?

A: 

It's possible that after the postback occurs the datasource is not being maintained or refilled and there are no items to populate the grid. Are you handling state correctly for the datasource object (rebinding/keeping the source alive) when paging is enabled?

This may sound like a vague answer, but without an example of how the source is getting the data it's kind of hard to diagnose why the items would be gone.

Edit:
The method I was thinking of was for callback paging/sorting. However I did find some info ont he ODS & Paging.. make sure you have set the following:

  1. GridView: AllowPaging and off course you need to set PageSize.
  2. ObjectDataSource: EnablePaging, also you need to set the:
    • MaximumRowsParameterName="maxRows"
    • StartRowIndexParameterName="startRowIndex"
    • SelectCountMethod="RecordCount"

I think you only need to set the 3 sub items of item 2 if you want to handle paging size etc manually.

Then you can read more up on this here.

Quintin Robinson
When AllowPaging is False I thought the grid doesn't rebind, it just grabs the values from viewstate. Are you saying I have to bind the data to the gridview on every postback when paging is enabled even if I'm not going to a different page? I'm just clicking a button on the page.
adam0101
I think there is a way to make the grid handle paging on it's own if binding to a datasource via an id but there is a property that you must set, although I may be thinking of "callback" paging. Let me check into it. Otherwise yes you generally have to handle paging manually.
Quintin Robinson
After reading this: http://blog.tylerholmes.com/2008/06/datasource-vs-datasourceid-internals.html it sounded like simply setting the DataSourceID was the trigger to get the grid to databind itself whenever it needed data.
adam0101
Your last edit got me looking some more - especially the 3rd bullet. It turns out my custom datasource was returning zero for the record count. So even though the data doesn't get rebound each time, it must still look at the count on each postback. I fixed it and got it working! Thanks for your help
adam0101
No problem, glad you got it up and running!
Quintin Robinson
A: 

I'm having a similar issue, and I'm still working through it, so I'll let you know if I fix it.

My problem is that I have a GridView with it's DataSourceID set to a SqlDataSource, but the SelectQuery is built dynamically based on the user's selection.

I get the data to be populated in the GV, but then when I click on a different page, the thing disappears. As far as I can tell, it is a problem with the GV not retaining it's data on postback, so I'll either have to mess with ViewState, or maybe look into custom paging.

Robert Iver
The weird thing is that I'm not even paging. If I set AllowPaging to True, the grid loses it's state for ANY postback. Sorting, however, works just fine.
adam0101