ListBox SelectedIndex返回错误的值

时间:2011-10-13 16:14:02

标签: c# asp.net


所以我有一个未绑定的ListBox,其中填充了ListBox项,其值如下:

new ListItem("Item1", "1")
new ListItem("Item2", "2")
new ListItem("Item3", "0")
new ListItem("Item4", "0")
new ListItem("Item5", "0")

删除按钮应该允许用户删除ListItem。但是,每当用户尝试删除值为零的项目时,仅选择最顶部的“零”项。在上面的示例中,如果选择“Item5”并单击“删除”,则“Item3”将被启动。具有适当编号值的项目表现得恰当。知道为什么会发生这种情况,或者我是否通过输入来回答我自己的问题(也许ASP.net无法区分具有相同值的项目?)?

任何帮助将不胜感激。非常感谢!

编辑:为了澄清,删除值为零的项目与具有其他值的项目不同。即:如果项目具有非零值,则按值删除。如果它的值为零,则它的ListBox索引将被删除,但该索引始终作为索引直接返回到最后一个非零值。

5 个答案:

答案 0 :(得分:0)

您自己找到了解决方案。如果按值查询项目,则将返回具有该值的第一个项目。

答案 1 :(得分:0)

不是按值删除,而是通过索引删除:

myDropDown.Items.RemoveAt(0);

答案 2 :(得分:0)

ListControl.Items.FindByTextListControl.Items.FindByValue只返回一个ListItem,我假设他们找到的第一个。

如果你想用相同值的倍数处理你的情况,那么你可能不得不写一些循环来查找和删除它们。

答案 3 :(得分:0)

您的列表项应具有唯一值。 Asp.net只回发为列表框选择的值,因此服务器将无法分辨它是哪个实际项目,因此它只是抓取第一个匹配。

答案 4 :(得分:0)

我建议循环收集并删除项目,如下所示:

for (int i = 0; i < DropDownList1.Items.Count; i++)
{
    ListItem item = DropDownList1.Items[i];
    if (item.Value == "0")
        DropDownList1.Items.RemoveAt(i);
}