簡體   English   中英

在C#中的列表框之間移動項目

[英]Move items between list boxes in C#

我開發了一個網頁,在其中使用以下代碼在兩個列表框之間移動所選項目。

非常慢。

是否對此有任何優化?

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

另一個編輯:如果您習慣使用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問題。 Web控件列表框沒有下面的代碼中使用的屬性。

在刪除集合中的項目時,在選定的項目/索引上循環是很危險的。

這是一種解決方案(使用LINQ),該解決方案將引用列表復制到所選項目,然后使用該副本移動這些項目:

var selItems = lstCategory.SelectedItems.Cast<object>().ToList();
foreach (var selItem in selItems)
{
    lstCategory.Items.Remove(selItem);
    lstSelCategory.Items.Add(selItem);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM