Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / General / May 2008

Tip: Looking for answers? Try searching our database.

When does a Bound Control DataBind?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Jonathan Wood - 08 May 2008 23:59 GMT
I have a databound dropdownlist control. Based on some other criteria, I
need to specify the selected item in my pages Load event.

The problem is that, in my load event, the control does not yet have any
data. I've found I can call DataBind() on that control and then it works
okay. However, this has me wondering where the control normally databinds,
and if me doing it manually would actually introduce the overhead of having
the control databind twice.

Can anyone answer these questions?

1. Does a control know it's been databound such that it will not repeat the
process unecessarily?

2. Is there a better way to specify the selected value of a control that has
not yet databound?

Thanks!

Signature

Jonathan Wood
SoftCircuits Programming
http://www.softcircuits.com

Manish - 09 May 2008 13:38 GMT
Hi Jonathan,

Please know that if you bind the dropdownlist control at design time with
some datasource then also specify also specify its text and value fields to
one of the column of the table. then you do not need to bind the dropdownlist
at run time.

Also, you can set the Selected Value of the control by calling

 Me.DropDownList1.SelectedValue = 76

but for that dropdownlist control should be bound.

Regards,
Manish
www.componentone.com

> I have a databound dropdownlist control. Based on some other criteria, I
> need to specify the selected item in my pages Load event.
[quoted text clipped - 14 lines]
>
> Thanks!
Jonathan Wood - 09 May 2008 17:00 GMT
Thanks, but as I described, my page's Load event cannot set the selected
value because the control has not yet been databound.

My question relates to calling the control's DataBind() method. If I do
that, then the control has data. But my concern is about performance if the
control automatically performs DataBind() before the page is finished, which
would mean it happens twice.

Signature

Jonathan Wood
SoftCircuits Programming
http://www.softcircuits.com

> Hi Jonathan,
>
[quoted text clipped - 37 lines]
>>
>> Thanks!
Milosz Skalecki [MCAD] - 10 May 2008 00:30 GMT
Hi Jomathan,

Ad 1. Yes, it does know.

BaseDataBoundControl:
protected internal override void OnPreRender(EventArgs e)
{
   this._preRendered = true;
   this.EnsureDataBound();
   base.OnPreRender(e);
}

protected virtual void EnsureDataBound()
{
   try
   {
       this._throwOnDataPropertyChange = true;
       if (this.RequiresDataBinding && ((this.DataSourceID.Length > 0) ||
this._requiresBindToNull))
       {
           this.DataBind();
           this._requiresBindToNull = false;
       }
   }
   finally
   {
       this._throwOnDataPropertyChange = false;
   }
}

protected virtual void OnDataPropertyChanged()
{
   if (this._throwOnDataPropertyChange)
   {
       throw new
HttpException(SR.GetString("DataBoundControl_InvalidDataPropertyChange", new
object[] { this.ID }));
   }
   if (this._inited)
   {
       this.RequiresDataBinding = true;
   }
}

As you can see data is bound only once (for the same datasource parameters).

Ad 2.

You can always set SelectedValue in the Page_load, even before the data has
been bound, as the SelectedValue is stored in the temporary variable until
the next databinding:

ListControl (base class for lis type control, i.e. dropdownlist, bulletedlist)
public virtual string SelectedValue
{
   get
   {
       int selectedIndex = this.SelectedIndex;
       if (selectedIndex >= 0)
       {
           return this.Items[selectedIndex].Value;
       }
       return string.Empty;
   }
   set
   {
       if (this.Items.Count != 0)
       {
           if ((value == null) || (base.DesignMode && (value.Length == 0)))
           {
               this.ClearSelection();
               return;
           }
           ListItem item = this.Items.FindByValue(value);
           if ((((this.Page != null) && this.Page.IsPostBack) &&
this._stateLoaded) && (item == null))
           {
               throw new ArgumentOutOfRangeException("value",
SR.GetString("ListControl_SelectionOutOfRange", new object[] { this.ID,
"SelectedValue" }));
           }
           if (item != null)
           {
               this.ClearSelection();
               item.Selected = true;
           }
       }
       this.cachedSelectedValue = value;
   }
}

HTH
Signature

Milosz

> Thanks, but as I described, my page's Load event cannot set the selected
> value because the control has not yet been databound.
[quoted text clipped - 45 lines]
> >>
> >> Thanks!
Jonathan Wood - 10 May 2008 17:35 GMT
Milosz,

> As you can see data is bound only once (for the same datasource
> parameters).

Thanks, that's what I was wondering about. I'm not sure if I understood how,
but I've printed out your reply and will examine the code more closely.

May I ask where you got that listing? I was thinking the framework source
was unavailable. What's the trick?

> You can always set SelectedValue in the Page_load, even before the data
> has
> been bound, as the SelectedValue is stored in the temporary variable until
> the next databinding:

Okay, I may need the data to correctly determine which item should be
selected. But that's helpful to know the SelectedValue can be set first.

Thanks again.

Signature

Jonathan Wood
SoftCircuits Programming
http://www.softcircuits.com

Milosz Skalecki [MCAD] - 10 May 2008 23:47 GMT
Hi Jonathan,

I used Reflector, very powerful freeware reverse engineering tool.
http://www.aisto.com/roeder/dotnet/
It will help you to understand what happens under the hood.
Have a nice weekend.

Signature

Milosz

> Milosz,
>
[quoted text clipped - 16 lines]
>
> Thanks again.
Jonathan Wood - 11 May 2008 00:22 GMT
Cool. Thanks.

Signature

Jonathan Wood
SoftCircuits Programming
http://www.softcircuits.com

> Hi Jonathan,
>
[quoted text clipped - 25 lines]
>>
>> Thanks again.

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.