所以我有一个未绑定的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索引将被删除,但该索引始终作为索引直接返回到最后一个非零值。
答案 0 :(得分:0)
您自己找到了解决方案。如果按值查询项目,则将返回具有该值的第一个项目。
答案 1 :(得分:0)
不是按值删除,而是通过索引删除:
myDropDown.Items.RemoveAt(0);
答案 2 :(得分:0)
ListControl.Items.FindByText
和ListControl.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);
}