Scott on Writing

Musings on technical writing...

Setting the DataList's SelectedIndex Programmatically

Have you ever tried to set the SelectedIndex property of a DataList programmatically, so that the SelectedItemTemplate will be used?  For example, you might be binding to the DataList information about products, and you might want to have the cheapest or most expensive product “selected” so that it is rendered via the SelectedItemTemplate.  Initially, you might think to solve this problem by creating an event handler for the DataList's ItemDataBound event, and then to programmatically set the SelectedIndex property based on the index of the row that meets whatever criteria you have outlined to be “selected.” 

Sadly, this approach won't work due to the order of events in rendering a DataList.  Let's step through the series of events that transpire when the DataList's DataBind() method is called. For each item in the DataList's DataSource, the following things happen in this order:

  1. A DataListItem instance is created.
  2. The proper template is used to render the contents of the DataListItem. It's at this point that the DataList's SelectedIndex is checked to see whether the ItemTemplate should be used or if the SelectedItemTemplate should be used.
  3. The DataList's ItemCreated event is raised.
  4. The DataListItem's DataItem property is set to the current DataSource row, and the DataListItem's DataBind() method is called.
  5. The DataList's ItemDataBound event is raised.

By examining the above sequence of events, it hopefully is evident why we can't simply set the SelectedIndex property in the DataList's ItemDataBound event and have it work as planned. The reason is because the SelectedItemTemplate has already been applied several steps before the DataList's ItemDataBound event fires. So, if setting the SelectedIndex in the ItemDataBound event handler is too late, where can we set this property?

The answer is that you have to set it before calling the DataBind() method.  Namely, after getting your data from the database but before calling the DataList's DataBind() method, you have to iterate through the records and determine the record index of the record that is to be selected.  Then, you have to set this property, and only then can you call DataBind().  This approach solves the problem discussed previously because it sets the SelectedIndex property before any of the five steps transpire.

If you want to learn more, check out the in-depth FAQ I wrote on this topic: Setting the SelectedIndex Programmatically.

Happy Programming!

posted on Friday, October 17, 2003 11:09 AM

Feedback

# re: Setting the DataList's SelectedIndex Programmatically 1/22/2006 10:13 PM Alex

This was idiotic back then and it's even more stupid now with 2.0 out. This basically makes the whole approach of DataSources completely invalid.

The more I work with asp.net the more it seems that the MS team is clearly split into two... you have smart folks working on things like Atlas, and then there are completely incompetent retards working on built in asp.net controls...

god damn... i had to find an open source version of the calendar and now i have to find open source version of the datalist too... good thing i only killed 3 hours trying to make the bloody thing work thinking i have to be doing something wrong...

# re: Setting the DataList's SelectedIndex Programmatically 1/23/2006 10:12 AM Scott Mitchell

You have some good points, Alex. And I agree that the Calendar control is one of those built-in ASP.NET server controls that has some 'quirks' as well! :-)

Title:  
Name:  
Url:
Protected by Clearscreen.SharpHIPEnter the code you see:
Comments   

My Links

Ads Via DevMavens

Archives

Post Categories

 

I am a Microsoft MVP for ASP.NET.
I am an ASPInsider.
<March 2010>
SMTWTFS
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

Comment Stats

DayTotal% of Total
Sunday 2056.8%
Monday 42514.1%
Tuesday 51917.2%
Wednesday 55518.4%
Thursday 58019.2%
Friday 54718.1%
Saturday 1886.2%
Total 3019100.0%

Hour1Total% of Total
12:00 AM 782.6%
1:00 AM 812.7%
2:00 AM 682.3%
3:00 AM 822.7%
4:00 AM 692.3%
5:00 AM 1264.2%
6:00 AM 1183.9%
7:00 AM 1816.0%
8:00 AM 1926.4%
9:00 AM 1585.2%
10:00 AM 1886.2%
11:00 AM 1936.4%
12:00 PM 2016.7%
1:00 PM 1846.1%
2:00 PM 1695.6%
3:00 PM 1354.5%
4:00 PM 1153.8%
5:00 PM 1073.5%
6:00 PM 1013.3%
7:00 PM 1073.5%
8:00 PM 923.0%
9:00 PM 882.9%
10:00 PM 913.0%
11:00 PM 953.1%
Total 3019100.0%

Comments by Blog Entry Date/Time

Day Entry MadeAvg.Total
Sunday 4.97159
Monday 4.80384
Tuesday 4.04477
Wednesday 7.39680
Thursday 6.26676
Friday 5.07466
Saturday 4.78177
Total 5.403019

Hour1 Entry MadeAvg.Total
12:00 AM 5.2937
1:00 AM 1.002
5:00 AM 0.000
7:00 AM 3.8550
8:00 AM 3.72134
9:00 AM 6.06297
10:00 AM 5.63276
11:00 AM 4.22194
12:00 PM 6.16351
1:00 PM 3.09133
2:00 PM 4.89230
3:00 PM 7.64321
4:00 PM 4.00108
5:00 PM 6.07170
6:00 PM 4.64116
7:00 PM 8.95188
8:00 PM 8.63164
9:00 PM 5.00115
10:00 PM 6.31101
11:00 PM 4.5732
Total 5.403019

Learn More About Comment Stats
1 - All times GMT -8...


Blog Stats

Favorite Web Sites

My Books

My MSDN Articles