在C#中的列表框之间移动项目

时间:2009-11-18 08:39:17

标签: c# webforms listbox

我开发了一个网页,其中我使用以下代码在两个列表框之间移动所选项目。

这很慢。

这有什么优化吗?

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)
    {
    }
}

1 个答案:

答案 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);
}