Почему dropdownlist.SelectedIndex = значение может потерпеть неудачу? - PullRequest
1 голос
/ 13 ноября 2009

У меня есть выпадающий список, к которому я привязываю данные. Вот код, который я использую для этого:

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. Что дает? Почему сглаживание оператора присваивания не работает?

Ответы [ 6 ]

5 голосов
/ 13 ноября 2009

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

1 голос
/ 13 ноября 2009

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

ddlDeptName.SelectedIndex = addressId

С этим:

ddlDeptName.SelectedValue = addressId.ToString()

Что касается причины сбоя - вероятно, addressId находится вне диапазона возможных index значений вашего выпадающего списка.

0 голосов
/ 13 ноября 2009

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

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 голосов
/ 13 ноября 2009

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

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 голосов
/ 13 ноября 2009

, как указывал TLiebe, переместите указатель данных на ПРЕЖДЕ, чем пытаетесь установить выбранное. метод привязки данных в основном стирает все предыдущие состояния, которые вы установили в комбинированном окне.

во-вторых, выбранный индекс НЕ является значением данных или элементами выбранного значения. это индекс элемента ListItem в коллекции элементов раскрывающегося списка, так что раскрывающийся список [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 голосов
/ 13 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...