更改1 DropDown的SelectedIndex会更改其他DropDownLists的SelectedIndex

时间:2010-08-15 23:40:41

标签: asp.net asp.net-4.0

我有一个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>

在后面的代码中我加载了这些项目,所以它们都匹配。然后我从数据库中检索数据并为每个db记录调用一个方法来设置下拉列表的选定索引。

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&amp; ddl2已更新。设置ddl4后,将更新ddl1,ddl2和ddl3选定的索引。

1 个答案:

答案 0 :(得分:1)

当我加载下拉列表时,我正在做这样的事情:

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);
...