我有一个Gridview,其中有两个下拉列表的模板字段。我在运行时使用相同的列表项绑定它们。
li = new listitem ("1","1");
dl1.items.add(li);
dl2.items.add(li);
li = new listitem ("2","2");
dl1.items.add(li);
dl2.items.add(li);
li = new listitem ("3","3");
dl1.items.add(li);
dl2.items.add(li);
dl1.selectedvalue = "2";
dl2.selectedvalue = "3";
执行上述操作后,dl1& dl2都显示“3”作为选定值。为什么呢?
我知道在绑定时使用2个不同的列表项目的工作,但我想知道为什么会发生这种情况?
答案 0 :(得分:4)
只看代码的最后一部分:你有一个列表项,它出现在两个不同的列表中。但它仍然是一个对象。您如何期望一个对象对单个属性(SelectedValue)具有两个不同的值?
答案 1 :(得分:3)
您必须为每个下拉列表实例化每个列表项。
ListItem li1 = new ListItem("1","1");
dl1.items.add(li1);
ListItem li2 = new ListItem("1", "1");
dl2.items.add(li2);
修改强> 乔恩描述了我的意思。您只有一个具有值的对象。因此,不要指望每个下拉列表都有不同的值。
当你将dl1设置为“3”时,它们都将获得相同的值,因为两个下拉列表都引用同一个对象!
答案 2 :(得分:3)
ListItem类有一个属性“Selected”,用于标记是否选中了该项。我没有检查DDL SelectedValue属性以查看它的作用,但我的猜测是ListItem.Selected属性被设置为true,并且因为您在两个下拉列表中使用相同的对象,所以它被标记在两者中都被选中。
我确定这是一个多选列表,“2”和“3”都会被标记为“已选中”。
答案 3 :(得分:1)
我认为这将是一个ref与价值问题。我确信如果从同一个列表项中添加d1和d2,它们将指向内存中的相同位置...
答案 4 :(得分:1)
listitem正在两个下拉列表中共享。当您为其中一个下拉菜单设置所选值时,它会将列表项设置为已选中。由于正在共享listitem,因此在两个下拉列表中都选择了它;