By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
434,701 Members | 1,938 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 434,701 IT Pros & Developers. It's quick & easy.

When does a Bound Control DataBind?

P: n/a
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!

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

Jun 27 '08 #1
Share this Question
Share on Google+
6 Replies


P: n/a
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

"Jonathan Wood" wrote:
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!

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

Jun 27 '08 #2

P: n/a
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.

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

"Manish" <Ma****@discussions.microsoft.comwrote in message
news:75**********************************@microsof t.com...
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

"Jonathan Wood" wrote:
>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!

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

Jun 27 '08 #3

P: n/a
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_Inval idDataPropertyChange", 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
--
Milosz
"Jonathan Wood" wrote:
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.

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

"Manish" <Ma****@discussions.microsoft.comwrote in message
news:75**********************************@microsof t.com...
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

"Jonathan Wood" wrote:
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!

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


Jun 27 '08 #4

P: n/a
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.

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

Jun 27 '08 #5

P: n/a
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.

--
Milosz
"Jonathan Wood" wrote:
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.

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

Jun 27 '08 #6

P: n/a
Cool. Thanks.

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

"Milosz Skalecki [MCAD]" <mi*****@DONTLIKESPAMwp.plwrote in message
news:D0**********************************@microsof t.com...
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.

--
Milosz
"Jonathan Wood" wrote:
>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.

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

Jun 27 '08 #7

This discussion thread is closed

Replies have been disabled for this discussion.