我有一个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());
}
}
}
}
答案 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();