Перемещение элементов между списками в C # - PullRequest
0 голосов
/ 18 ноября 2009

Я разработал веб-страницу, на которой я использовал следующий код для перемещения выбранных элементов между двумя списками.

Это очень медленно.

Есть ли оптимизация для этого?

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 Ответ

1 голос
/ 18 ноября 2009

Другое редактирование: работать с asp.net странно, если вы привыкли к winforms. Последняя, ​​фактически протестированная на этот раз версия ниже

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. В списке веб-управления отсутствуют свойства, используемые в приведенном ниже коде.

Опасно зацикливаться на выбранных элементах / индексах, пока вы удаляете элементы из коллекции.

Вот решение (с использованием LINQ), которое копирует список ссылок на выбранные элементы, а затем использует копию для перемещения элементов:

var selItems = lstCategory.SelectedItems.Cast<object>().ToList();
foreach (var selItem in selItems)
{
    lstCategory.Items.Remove(selItem);
    lstSelCategory.Items.Add(selItem);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...