Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DataBind and Postback

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?

like image 474
Michael La Voie Avatar asked May 06 '09 19:05

Michael La Voie


2 Answers

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:

  • Not strongly typed
  • Inflexible (as you've noted)
  • Muddy up the presentation code

I've taken to doing all data access in the code behind and haven't looked back.

like image 185
Gavin Miller Avatar answered Sep 21 '22 21:09

Gavin Miller


I fought with this automatic binding as well and thought I post my solution here:

  1. remove the "DataSourceID" from the ASPX page, when its not set, there is no automatic binding
  2. set the DataSourceID in the CodeBehind only when DataBinding is needed: myGridView.DataSourceID = "MyDataSource";
  3. do not call myGridView.DataBind() explicitly, databinding happens automatically at PreRender

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

like image 37
PeterFromCologne Avatar answered Sep 24 '22 21:09

PeterFromCologne