Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#net中单击按钮时将所选项目从一个列表视图复制到另一个列表视图?_C#_.net_Listview_Checkbox - Fatal编程技术网

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

如何在c#net中单击按钮时将所选项目从一个列表视图复制到另一个列表视图?,c#,.net,listview,checkbox,C#,.net,Listview,Checkbox,如何在单击按钮时将所选项目从一个列表视图复制到另一个列表视图无任何冗余我还可以为多个项目提供选项,并在不使用键盘ctrl键的情况下批量添加这些项目吗??使其用户友好我们可以使用复选框,它们将如何工作?? 下面的代码用于复制单个项目选择的条目,并在再次选择该项目时提供重复条目…请帮助我删除缺陷 private void btn_Add_Click(object sender, EventArgs e) { CopySelectedItems(source_n

如何在单击按钮时将所选项目从一个列表视图复制到另一个列表视图无任何冗余我还可以为多个项目提供选项,并在不使用键盘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());
    }
}

您必须在SelectedItems上循环,并在第二个ListView中创建新的ListView项

伪代码:

foreach(var item in lst1.SelectedItems)
{
    var lvi = lst2.Items.Add(item.Text);
    lvi.ImageIndex = item.ImageIndex;
    ...
}

我想冒昧地猜测一下,这将是一件简单的事情,将第一个listView中的所有选定项保存到一个正确类型的列表中,然后遍历该列表,将它们全部添加到第二个listView


我不在开发计算机上,因此恐怕无法发布任何正确的代码。

在按钮单击处理程序中,在源列表中找到所选项目,并将其添加到目标列表中。大概是这样的:

            var insertPos = 0;
            foreach ( ListViewItem s in sourceList.SelectedItems )
            {
                s.Remove ( );
                var copyCode = Int32.Parse ( s.Text );
                while ( insertPos < destinationList.Items.Count )
                {
                    var itemAtCandidate = Int32.Parse ( destinationList.Items [ insertPos ].Text );
                    if ( itemAtCandidate > copyCode )
                        break;
                    insertPos++;
                }
                destinationList.Items.Insert ( insertPos, s );
            }
var insertPos=0;
foreach(sourceList.SelectedItems中的ListViewItems)
{
s、 删除();
var copyCode=Int32.Parse(s.Text);
while(insertPoscopyCode)
打破
insertPos++;
}
destinationList.Items.Insert(insertPos,s);
}

这将把“sourceList”中的所有选定项目移动到“destinationList”并保持它们的排序顺序。

有两种不同的方法

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

private static void CopySelectedItems(ListView source, ListView target)
{
    foreach (ListViewItem item in source.SelectedItems)
    {
        target.Items.Add((ListViewItem)item.Clone());
    }
}
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);
    }            
}
如果要将项目从a移动到b:

private static void CopySelectedItems(ListView source, ListView target)
{
    foreach (ListViewItem item in source.SelectedItems)
    {
        target.Items.Add((ListViewItem)item.Clone());
    }
}
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);
    }            
}
更新
您提到您希望保留项目在源
列表视图
控件中的位置顺序。我想他们是按顺序出现的吧?如果是这样,您可以创建一个函数,该函数使用相同的排序规则来确定在目标
列表视图中插入项目的位置(我的示例使用第二列中的值:

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;
}

在不知道更多细节的情况下,很难给出更准确的答案。

这部分做什么?lvi.ImageIndex=item.ImageIndex;ListViewItem有一个图像索引。我建议您在目标列表中创建新的ListViewItems。因此我添加了该属性作为示例。感谢它工作正常,但我需要按排序顺序显示它们r它正在显示SNo。同样在源文件中..我需要重新输入序列顺序..要做的具体修改是什么?先生,此代码从一个listview中删除该项,然后将其添加到另一个listview…我不想从一个listview中删除这些项,我只想将它们添加到其他listview,而不从列表中删除它们源listview也不应该添加重复的条目…谢谢你的代码…请告诉我如果我需要添加多个项目,我可以在代码中做哪些修改,以便在目标listview中选择并添加多个项目。请告诉我一种方法,如果我可以刷新listview或在完成后清除listview一倍enteries@zoya:正如代码示例所示,它们将处理所有不同的情况(源为空,源为零,选择了一个或多个项)。不需要修改代码来处理这些不同的场景。先生,我不知道这个CopySelectedItems事件来自何处??这是listview的事件吗?对不起,我弄错了,你已经做了一个函数。谢谢先生,我试过了。它工作正常。你能告诉我如何在目标listview中重新生成SNo吗正在生成源listview的SNo。。