This is a general how does DataBind work questions...
I have a simple page with a GridView that is bound (in the aspx code) to an ObjectDataSource.
I can look in the Select() function called by the ObjectDataSource to see that it is called on the initial load and on every post back. I have some logic that happens on post backs that will affect the GridView's data, and I want to call GridView.DataBind() later on in the post back, after I've made some changes.
Is there a way to prevent the automatic rebinding that happens on each post back? Does this mean I can't use an ObjectDataSource for this control?
Yes. If you want that kind of control over when the databinding happens you need to do it in the code behind.
You're correct in that the fine grained control you're looking for is not possible and requires the code behind. ASP.NET's data source objects are nothing but a pain in the a**. You'll find that as you use them you'll get situations like this cropping up again and again.
Some of the problems you'll find are:
I've taken to doing all data access in the code behind and haven't looked back.
I fought with this automatic binding as well and thought I post my solution here:
Took me a while to figure this out, but now wverything works fine.
Context
I use the ObjectDatasource because it handels all the paging and sorting of the Gridview automatically for me. I am using a data layer with Linq2SQL and use its Skip() and Take() methods to load only the amount of data needed to populate one page of the GridView.
Using the SelectMethod and SelectCountMethod of the ObjectDataSource