ASP.NET 2.0的ListBox中,删除多项不能像这样写:
foreach(ListItem li in ListBox1.Items)
{
if(li.Selected)
{
ListBox1.Items.Remove(li);
}
}
因为foreach要求in后面的集合内容不慢,而一旦执行
ListBox1.Items.Remove(li);
ListBox1.Items集合就会发生改变了。
于是,想到用index集删除的方法:
int [] indexToDel=ListBox1.GetSelectedIndices(); //取得所有选取值的index集合
int cnt=indexToDel.Length;
for(int i=0;i<cnt;i++)
{
ListBox1.Items.RemoveAt(indexToDel[i]);
}
开始以为没有问题了,结果还是不行,因为在删除时,将前面的项删除以后,后面的index就会相应减小,最后导致删除项越界。
再次尝试下面的代码:
int [] indexToDel=ListBox1.GetSelectedIndices(); //取得所有选取值的index集合
int cnt=indexToDel.Length;
for(int i=cnt-1;i>=0;i--)
{
ListBox1.Items.RemoveAt(indexToDel[i]);
}
从最后一项开始删除,程序通过。