Изменить SelectedIndex из 1 DropDown изменяет SelectedIndex других DropDownLists - PullRequest
1 голос
/ 16 августа 2010

У меня есть ASP.NET 4 WebForm с 4 раскрывающимися списками в таблице.

<table>
  <tr><td><asp:DropDownList ID='dd1' runat='server' /></td></tr>
  <tr><td><asp:DropDownList ID='dd2' runat='server' /></td></tr>
  <tr><td><asp:DropDownList ID='dd3' runat='server' /></td></tr>
  <tr><td><asp:DropDownList ID='dd4' runat='server' /></td></tr>
</table>

В коде я загружаю их с элементами, чтобы они все совпадали. Затем я извлекаю данные из базы данных и вызываю метод для каждой записи базы данных, чтобы установить выбранный индекс раскрывающегося списка.

int i = 0;
foreach (var rec in dataRecords) {
    switch (i) {
      case 0:
        SetDropDownValue(rec, dd1);
        break;
      case 1:
        SetDropDownValue(rec, dd2);
        break;
      case 2:
        SetDropDownValue(rec, dd3);
        break;
     case 3: ...
     case 4: ...
     default: ...
}
i++;

private void SetDropDownValue(DBRecord selectedRecord, DropDownList dl)
{
    string importantVal = selectedRecord.Field;
    var li = dl.Items.FindByValue(importanVal);
    dl.SelectedIndex = dl.Items.IndexOf(li);
}

Пройдя через отладчик, записи верны, а выпадающий список верен в методе SetDropDownValue.

Как только выполняется dl.SelectedIndex = dl.Items.IndexOf (li); , все предыдущие выпадающие списки, переданные методу, получают обновленный индекс. Таким образом, когда выбранный индекс ddl2 изменяется, ddl1 изменяется на новый выбранный индекс ddl2. Когда обновляется ddl3, обновляются ddl1 и ddl2. Когда ddl4 установлен, обновляются выбранные индексы ddl1, ddl2 и ddl3.

1 Ответ

1 голос
/ 16 августа 2010

Когда я загружал выпадающие списки, я делал что-то вроде этого:

foreach (var dropDownOption in DropDownOptions) {
  ListItem li = new ListItem(dropDownOption.ValueField);
  dd1.Items.Add(li);
  dd2.Items.Add(li);
  ...
}

Так что все элементы ListItems одинаковы для каждого списка.

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

ListItem li = new ListItem(dropDownOption.ValueField);
dd1.Items.Add(li);
li = new ListItem(dropDownOption.ValueField);
dd2.Items.Add(li);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...