2009-11-13 2 views
1

У меня есть раскрывающийся список, который я привязываю к datatable. Вот код, я использую, чтобы сделать это:Зачем нужен dropdownlist.SelectedIndex = значение сбой?

ddlBuildAddr.DataSource = buildings 
ddlBuildAddr.DataTextField = "buildingName" 
ddlBuildAddr.DataValueField = "buildingId" 
Dim addressId As Int32 = OfficeData.GetInstance().GetBuildingId(currentAddress) 
ddlBuildAddr.SelectedIndex = addressId 
ddlBuildAddr.DataBind() 

К сожалению, линия ddlBuildAddr.SelectedIndex = addressId не удается. Рассматривая эту строку через отладчик, SelectedIndex переходит в -1, а addressId переходит в 2. Что дает? Почему оператор-оператор назначения не работает?

ответ

5

Переместите свой ddlDeptName.DataBind(), прежде чем пытаться установить выбранный индекс. Перед тем, как связываться, на самом деле у вас нет элементов в раскрывающемся списке, поэтому индекс 2 недействителен.

+0

Глупая ошибка, вы правы! Однако выбранный индекс не изменяется. – 2009-11-13 15:06:40

+1

Вы подтвердили, что выпадающее меню действительно заполнено чем-нибудь? Попробуйте прокомментировать строку, чтобы установить индекс и убедиться, что в список загружены элементы. Также, как и другие, вы, вероятно, захотите установить свойство SelectedValue. – TLiebe

+0

Да, это так. Я сделал это, и все заполнено отлично :) – 2009-11-13 15:28:32

0

Я думаю, что вам нужно установить свойство SelectedValue.

+0

SelectedValue возвращает пустую строку. – 2009-11-13 15:08:28

1

Замените эту строку

ddlDeptName.SelectedIndex = addressId 

С этим:

ddlDeptName.SelectedValue = addressId.ToString() 

А почему он терпит неудачу - AddressID, скорее всего, из диапазона возможных индекса значений вашего выпадающего списка.

+0

отнять ToString как-то сделал эту работу. Спасибо – 2009-11-13 15:34:19

+0

Если вы возьмете ToString, тогда вы придумаете то же самое, что я предложил, и вы сказали, что это не сработало ... а? – Konamiman

0

Как указал TLiebe, переместите свою привязку данных до того, как вы попытаетесь установить выбранный. метод привязки данных в основном стирает любое предыдущее состояние, которое вы установили в поле со списком.

второй, выбранный индекс НЕ является элементом данных или выбранными членами. это индекс ListItem в выпадающем списке элементов, так что dropdown [dropdown.selectedindex] предоставит вам элемент из списка, который отмечен как выбранный. поэтому вы должны найти элемент, который хотите выбрать, а затем установить выбранный индекс в индекс этого элемента.

пример VB из MSDN:

' Selects the item whose text is Apples 
ListBox1.Items.FindByText("Apples") 
If Not li Is Nothing Then 
    li.Selected = True 
End If 

// Selects the item whose text is Apples 
ListItem li = ListBox1.Items.FindByText("Apples"); 
if(li != null) 
{ 
    li.Selected = true; 
} 
0

Используйте этот

ddlBuildAddr.DataSource = buildings 
ddlBuildAddr.DataTextField = "buildingName" 
ddlBuildAddr.DataValueField = "buildingId" 
Dim addressId As Int32 = OfficeData.GetInstance().GetBuildingId(currentAddress) 

ddlBuildAddr.Databind() 

После

foreach (var item in ddlBuildAddr.Items) 
{ 
    if(Convert.toInt32(item.value)==addressId) 
    { 
    item.selected=true; 
    break; 
    } 
} 
0

Изменить код следующим образом ....

ddlBuildAddr.DataSource = buildings 
ddlBuildAddr.DataTextField = "buildingName" 
ddlBuildAddr.DataValueField = "buildingId" 
ddlBuildAddr.DataBind() 

Dim addressId As Int32 = OfficeData.GetInstance().GetBuildingId(currentAddress) 

ddlBuildAddr.SelectedValue = addressId //It may throw error if item is not found in the list 
(or) 
ddlBuildAddr.Items.FindByValue(addressId).Selected = true; 
(or) 
ListItem lstNew = ddlBuildAddr.Items.FindByValue(addressId) 
ddlBuildAddr.selectedItem = lstNew 
+0

свойство .selecteditem доступно только для чтения :) – 2009-11-13 15:32:36

Смежные вопросы