2012-11-27 39 views
0

我有一个listview几个项目。我正在使用foreach循环来检查是否有匹配。该代码我使用看起来像这样:用新的替换listview中的对象?

foreach (ListViewItem test in listView1.Items) 
{ 
    if (test.SubItems[1].ToString() == item.SubItems[1].ToString()) 
    { 
     test.Tag = item.Tag; 
    } 
} 

我所试图做的是,检查第二个指标,如果有一个与之相匹配的新的“项目”代替旧项目“测试”。

显然没有改变的列表视图。我正在更换对象的方式是否错误?

+0

我的问题是为什么在listview项没有改变?我错误地取代它? – Liban

+0

你期望看到什么样的改变? “标签”属性是简单的持有者,它可以满足您想要的任何价值,并且不会被列表视图项目扫描。 – Rafal

+0

显示你的代码如何绑定列表视图和什么是'项目'? – Damith

回答

1

您可以克隆项目并直接分配给列表视图项目。但您需要将foreach循环更改为for循环。

for (int i = 0; i < listView1.Items.Count; i++) 
{ 
    if (listView1.Items[i].SubItems[1].ToString() == item.SubItems[1].ToString()) 
    { 
     listView1.Items[i] = (ListViewItem)item.Clone(); 
    } 
} 
+0

谢谢@Damith。那很好用.. – Liban

0

您只更新了标签。您需要更改test.SubItems [0],test.SubItems [1],...以查看更改。

或者您可以使用listView1.Items.Remove(...)listView1.Items.RemoveAt(...)listView1.Items.Insert(...)删除旧项目并插入新项目。但是如果你需要支付性能帐户,你应该使用第一个算法(改变test.SubItems [i])。

+0

其实我试图用循环来更新SubItems [i],它起作用。但有没有办法可以更新整个项目而不是更改所有子项目?我猜'项目'是一个包含整个SubItems的listview对象。 – Liban