我有一个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选定的索引。
答案 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);
...