2012-11-27 37 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