0

我试图将项目从一个列表框移动到另一个,如果它们是多个但我只能移动几个,这意味着少于计数。我也无法通过 for each 和 for 循环实现。

if (AdvLst.SelectedIndex > -1)
        {
            for (int i = 0; i <= AdvLst.Items.Count - 1; i++)
            {
                if (AdvLst.Items[i].Selected)
                {
                    string _value = AdvLst.SelectedItem.Value;
                    string _text = AdvLst.SelectedItem.Text;
                    ListItem item = new ListItem();
                    item.Text = _text;
                    item.Value = _value;
                    SelectedMortLst.Items.Add(AdvLst.Items[i]);
                    AdvLst.Items.Remove(AdvLst.Items[i]);
                }
            }

并通过 foreach 循环:

                foreach (ListItem li in AdvLst.Items)
            {
                if (li.Selected == true)
                {
                    SelectedMortLst.Items.Add(AdvLst.SelectedItem);
                    AdvLst.Items.Remove(AdvLst.SelectedItem);
                }

            }
4

2 回答 2

2

解决方案 1

var selectedItems = AdvLst.Items.Cast<ListItem>().Where(m => m.Selected).ToArray();
SelectedMortLst.Items.AddRange(selectedItems);

//there's no removeRange, so...
foreach(var item in selectedItems)
    AdvLst.Items.Remove(item);

解决方案2(几乎相同)

var selectedItems = AdvLst.Items.Cast<ListItem>().Where(m => m.Selected).ToArray();
foreach(var item in selectedItems) {
   SelectedMortLst.Add(item);
   AdvLst.Items.Remove(item);
}

解决方案3,for循环代码更正

for (int i = 0; i <= AdvLst.Items.Count - 1; i++)
    {
       if (AdvLst.Items[i].Selected)
           {
              string _value = AdvLst.SelectedItem.Value;
              string _text = AdvLst.SelectedItem.Text;
              ListItem item = new ListItem();
              item.Text = _text;
              item.Value = _value;
              SelectedMortLst.Items.Add(AdvLst.Items[i]);
              AdvLst.Items.Remove(AdvLst.Items[i]);
              i--;
            }
      }

因为如果你在 for 循环中删除一个项目,集合的计数会改变,并且i+1当你删除项目时所在的项目现在有 index i。使用i--,您的 for 循环将适应该变化

于 2013-01-31T07:48:17.470 回答
0

一次做一个操作,要么先删除,要么先添加。您可以先将项目添加到目标列表,然后再从源中删除

List<ListItem> itemsToDelete=new List<ListItem>();
 foreach (ListItem li in AdvLst.Items)
            {
                if (li.Selected == true)
                {
                    SelectedMortLst.Items.Add(AdvLst.SelectedItem);
                    itemsToDelete.Add(AdvLst.SelectedItem);
//                    AdvLst.Items.Remove(AdvLst.SelectedItem);
                }

            }

foreach(ListItem item in itemsToDelete)
{
AdvLst.Items.Remove(item);
}
于 2013-01-31T07:47:27.453 回答