如何在c#net中单击按钮时将所选项目从一个列表视图复制到另一个列表视图?

zoy*_*oya 3 .net c# checkbox listview

如何在按钮单击时将所选项目从一个列表视图复制到另一个列表视图.如果没有任何冗余,我可以选择多个项目并将其添加到批量中而不使用键盘上的ctrl吗?使用户友好,我们可以使用复选框,他们将如何工作?下面的代码用于复制项目的单个选项的条目,并且它再次选择该项目时给出重复的条目...请帮助我删除缺陷...

private void btn_Add_Click(object sender, EventArgs e)        
{        
    CopySelectedItems(source_name, target_name);     
}

private void CopySelectedItems(ListView source, ListView target) 
{        
    foreach (ListViewItem item in source.SelectedItems) {
        target.Items.Add((ListViewItem)item.Clone());
    }
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*örk 5

有几种不同的方式.

如果要将项目从a 复制到b:

private static void CopySelectedItems(ListView source, ListView target)
{
    foreach (ListViewItem item in source.SelectedItems)
    {
        target.Items.Add((ListViewItem)item.Clone());
    }
}
Run Code Online (Sandbox Code Playgroud)

如果要将项目从a 移动到b:

private static void MoveSelectedItems(ListView source, ListView target)
{    
    while (source.SelectedItems.Count > 0)
    {
        ListViewItem temp = source.SelectedItems[0];
        source.Items.Remove(temp);
        target.Items.Add(temp);
    }            
}
Run Code Online (Sandbox Code Playgroud)

更新
您提到要保留项目在源代码ListView管理中的顺序.我假设它们以某种排序顺序出现在那里?如果是这样,您可以创建一个使用相同排序规则的函数来确定在目标中插入项目的位置ListView(我的示例使用第二列中的值:

private static void CopySelectedItems(ListView source, ListView target)
{
    foreach (ListViewItem item in source.SelectedItems)
    {
        ListViewItem clone = (ListViewItem)item.Clone();
        target.Items.Insert(GetInsertPosition(clone, target), clone); ;
    }
}

private static int GetInsertPosition(ListViewItem item, ListView target)
{
    const int compareColumn = 1;
    foreach (ListViewItem targetItem in target.Items)
    {
        if (targetItem.SubItems[compareColumn].Text.CompareTo(item.SubItems[compareColumn].Text) > 0)
        {
            return targetItem.Index;
        }
    }
    return target.Items.Count;
}
Run Code Online (Sandbox Code Playgroud)

在不了解更多细节的情况下,很难给出更准确的答案.