如何导入Listview项目C#

时间:2016-06-04 19:03:13

标签: c# listview

我在Form2中有一个列表视图,现在我希望此Listview中的项目与Form1中的Listview中的项目相同。有没有像:

listview1.Items = Form1.listview1.Items

3 个答案:

答案 0 :(得分:0)

Items属性作为一个整体是只读的。所以你的代码不能编译。

ListViewItem只能加入一个 ListViewItemCollection。因此,尝试将所有项添加到第二个ListView的代码将在运行时失败。但是你可以创建Items的克隆..

如果你只想要Items副本,你可以这样做:

foreach (ListViewItem lvi in listView1.Items)
            listView2.Items.Add((ListViewItem)lvi.Clone());

或者使用LINQ,这通常会更短:

listView2.Items.AddRange(listView1.Items.Cast <ListViewItem>()
                                        .Select(x => (ListViewItem)x.Clone())
                                        .ToArray());

这次LINQ实际上更长用它的转换来编写而不是简单的循环..

请注意,Clone只能创建“浅”副本。这意味着虽然值类型(如所有字符串属性都被复制到新的独立字符串中),但副本的引用属性仅包含引用的副本,因此它们仍指向同一对象。因此,如果您向引用另一个Tag的{​​{1}}添加ListViewItem A,则克隆的Item B也将指向Item C

可能不是问题,但重要的是要记住..

Item B并不擅长ListView。因此,如果您希望实际共享相同的数据,您需要编写同步LV的代码,或者查看将数据绑定添加到LV子类(如this one)的项目。

另请注意,您显然需要引用两个DataBinding。在构造函数中传递要访问的ListViews或对整个Control的引用是一种常见的方法。在后一种情况下,不要忘记制作修饰符Form! - 对于这些技术,这里有近23万亿个答案; - )

答案 1 :(得分:-1)

你可以使listview1成为一个静态成员,这样你就可以这样访问它:

public static ListView listview1 {get; set;}

在构造函数中,您可以将ListView设置为:

public Form1()
{
   listview1 = this.YourListView;
}

编辑:

我不确定你是否可以这样做:    listview2.items = listview1.items;

但您可以遍历listview1中的每个项目并将其添加到listview2

答案 2 :(得分:-1)

只要它们属于同一类型,使用AddRange就非常简单:

list2.AddRange(list1的);