下拉列表填充相同的列表项

时间:2009-01-09 13:15:44

标签: c# gridview .net-2.0

我有一个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个不同的列表项目的工作,但我想知道为什么会发生这种情况?

5 个答案:

答案 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,因此在两个下拉列表中都选择了它;