I have a dropdownlist which lives inside of a repeater. The repeater
accepts user input via textboxes and the aforementioned dropdownlist.
The repeater accepts phone numbers and allows for an arbitrary number
of empty rows to be added to it.
So, if a user knew in advance that they wanted to add 3 phone numbers,
they can type the nuber '3' in a textbox (outside the repeater)
and click a button (also outside of a repeater), and 3 new empty rows
will appear in the repeater. The code that does that looks
like this:
For Each objRepeaterItem As RepeaterItem In rptAgencyPhoneList.Items
Dim ddlPhoneCategory As DropDownList =
DirectCast(objRepeaterItem.FindControl("ddlPhoneCa tegory"),
DropDownList)
'Create a Phone object
Dim objPhone As New
Phone(ConvertExpectedInteger(DirectCast(objDataGri dItem.FindControl("lblPkPhone"),
Label).Text))
With objPhone
.Number =
DirectCast(objDataGridItem.FindControl("txtAdditio nalVoice"),
TextBox).Text
.TTYNumber =
DirectCast(objDataGridItem.FindControl("txtAdditio nalTTY"),
TextBox).Text
.Category =
ConvertExpectedInteger(ddlPhoneCategory.SelectedVa lue)
.CategoryName =
ConvertExpectedString(ddlPhoneCategory.SelectedIte m.Text)
End With
'Add the existing items to the collection
objPhoneCollection.Add(objPhone)
'Add the requested blank rows to the collection
For i As Integer = 1 To rowsToAdd
Dim objPhone As New Phone
objPhoneCollection.AddEmptyItem(objPhone)
Next
Next
After I have added the information from the repeater into a collection,
I bind to the repeater
rptAgencyPhoneList.dataSource = objPhoneCollection
rptAgencyPhoneList.Databind
Then the repeater's item_created event takes over, as shown below.
'eliminate headers, footers, seperators....
If e.Item.ItemType = ListItemType.AlternatingItem Or
e.Item.ItemType = ListItemType.Item Then
'Populate the phone category drop down list
Dim ddlPhoneCategory As DropDownList =
DirectCast(e.Item.FindControl("ddlPhoneCategory"), DropDownList)
Dim objPhoneCategoryList As ListItemCollection =
getPhoneCategoryList()
For Each item As ListItem In objPhoneCategoryList
ddlPhoneCategory.Items.Add(item)
Next
'If a phone number exists, then select the appropriate category type
in the drop down list
If ConvertExpectedInteger(DataBinder.Eval(e.Item.Data Item,
"Category")) > 0 Then
ddlPhoneCategory.Items.FindByValue(DataBinder.Eval (e.Item.DataItem,
"Category").ToString).Selected = True
End If
End If
After all of this is finished, the page is displayed. However the
dropdownlist's selected item is always set to the first item in the
list
no matter what. Also, If I add an Else statement to the last IF..End IF
a error message is thrown stating that a dropdownlist can have
only one selected item.
Does anyone have any ideas?