复选框列表视图

时间:2013-11-26 06:35:49

标签: c# listview checkbox

我有一个listview1,每行都有一个复选框,我想在选中时将选中的项目传递给listview2。

            private void Listview1_ItemChecked(object sender, ItemCheckedEventArgs e)
    {
        foreach (ListViewItem Item in listView1.Items)
        {
            if (Item != null)
            {
                ListViewItem li;
                if (Item.Checked == true)
                {
                    li = listView2.Items.Add(listView2.Items[0].ToString());
                    li.SubItems.Add(listView2.Items[1].ToString());
                    li.SubItems.Add(listView2.Items[2].ToString());
                    li.SubItems.Add(listView2.Items[3].ToString());
                    li.SubItems.Add(listView2.Items[4].ToString());
                    li.SubItems.Add(listView2.Items[5].ToString());
                    li.SubItems.Add(listView2.Items[6].ToString());
                    li.SubItems.Add(listView2.Items[7].ToString());
                    li.SubItems.Add(listView2.Items[8].ToString());
                    li.SubItems.Add(listView2.Items[9].ToString());

                }
            }
        }

    }

2 个答案:

答案 0 :(得分:0)

尝试使用Clone()方法,这会将所有相同的选中项目从listView1添加到listView2

foreach (ListViewItem Item in listView1.Items) {
   if (Item.Checked) {
        listView2.Items.Add((ListViewItem)Item.Clone());
   } 
}

如果您要从listView1中删除选中的项目,可以尝试以下操作:

for(int i = listView1.Items.Count-1; i >= 0; i--){
   var item = listView1.Items[i];
   if(item.Checked) {
      listView1.Items.Remove(item);
      listView2.Items.Add(item);
   }
}

如果您要将选中的项目添加到listView2,只有在listView1中选中后,请尝试以下操作:

private void Listview1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
    if(e.Item.Checked){
      listView1.Items.Remove(e.Item);
      listView2.Items.Add(e.Item);      
    }
}

更新:要注册Listview1_ItemChecked事件的listView1.ItemChecked处理程序,请尝试使用此代码(放置在表单构造函数中):

public Form1(){  
  InitializeComponent();
  listView1.ItemChecked += Listview1_ItemChecked;
}

答案 1 :(得分:0)

您可以在LINQ中尝试

var checkedItems = (from ListViewItem item in listView1.Items select item != null &&  item.Checked == true).ToList();
listview2.DataSource = checkedItems; //if using data basic asp.net data bind
listview2.DataBind();