我开发了一个网页,其中我使用以下代码在两个列表框之间移动所选项目。
这很慢。
这有什么优化吗?
protected void MovetoNext_Click(object sender, EventArgs e)
{
try
{
for (int i = 0; i < lstCategory.Items.Count; i++)
{
if (lstCategory.Items[i].Selected)
{
lstCategory.Items[i].Selected = false;
lstSelCategory.Items.Add(lstCategory.Items[i]);
lstCategory.Items.RemoveAt(i);
i = i - 1;
}
}
}
catch (Exception ex)
{
}
}
答案 0 :(得分:1)
另一个编辑:如果你习惯了winforms,那么使用asp.net会很奇怪。 这次实际测试的最新版本低于
using System.Collections.Generic;
var selectedIndices = lstCategory.GetSelectedIndices();
var killList = new List<ListItem>();
foreach (var selIndex in selectedIndices)
{
//add the item to remove to the kill list AND to the other listbox
killList.Add(lstCategory.Items[selIndex]);
lstSelCategory.Items.Add(lstCategory.Items[selIndex]);
}
foreach (var killMe in killList)
{
lstCategory.Items.Remove(killMe);
}
编辑:以下代码不起作用。我认为问题是WinForms问题。 webcontrol列表框没有以下代码中使用的属性。
在删除集合中的项目时,循环选定的项目/索引是危险的。
这是一个解决方案(使用LINQ)复制所选项目的引用列表,然后使用该副本移动项目:
var selItems = lstCategory.SelectedItems.Cast<object>().ToList();
foreach (var selItem in selItems)
{
lstCategory.Items.Remove(selItem);
lstSelCategory.Items.Add(selItem);
}