我试图将项目从一个列表框移动到另一个列表框,如果它们是多个但我只能移动少数,意味着小于计数。我也无法为每个和for循环实现via。
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);
}
}
答案 0 :(得分: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 (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
处的项目现在具有索引i
。使用i--
,您的for循环适应该更改
答案 1 :(得分:0)
一次执行一项操作,先删除或添加。 您可以先将项目添加到目的地列表,然后从源中删除</ p>
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);
}