2012-04-23 80 views
0

如何遍歷列表視圖列,以便我們可以檢查列表視圖列中的項目是否已經存在以及是否存在,然後更改項目。如何遍歷列表視圖列

例如我有一個列表視圖(數量和項目),我想檢查新添加的項目是否已經存在於列表視圖中,然後只將數量更改爲數量++而不是添加新項目。

string[] saLvwItem = new string[4]; 
saLvwItem[0] = a.ToString(); 
saLvwItem[1] = r["ItemNumber"].ToString(); 
saLvwItem[2] = r["ItemName"].ToString(); 
saLvwItem[3] = r["Price"].ToString(); 

ListViewItem lvi = new ListViewItem(saLvwItem); 
listView1.Items.Add(lvi); 

所有的值都來自數據庫。

回答

0

如果你想匹配ITEMNAME(columnIndex = 2),並增加ItemNumber(columnIndex = 1),那麼這可能工作:

private void InsertOrUpdateItem(ListView listView, string[] saLvwItem) 
    { 
     if (saLvwItem == null || saLvwItem.Length < 4) 
     { 
      return; 
     } 

     bool bFound = false; 
     foreach (ListViewItem lvi in listView.Items) 
     { 
      if (lvi.SubItems[2].Text == saLvwItem[2]) 
      { 
       // item already in list 
       // increase the ItemNumber 
       lvi.SubItems[1].Text = (Convert.ToInt32(lvi.SubItems[1].Text) + Convert.ToInt32(saLvwItem[1])).ToString(); 
       bFound = true; 
       break; 
      }     
     } 

     if (!bFound) 
     { 
      // item not found 
      // create new item 
      ListViewItem newItem = new ListViewItem(saLvwItem); 
      listView.Items.Add(newItem); 
     } 

    } 
+0

這一個模式適當和有幫助....非常感謝你 – alternatefaraz 2012-04-23 22:20:56

+0

這是一個糟糕的實現,沒有人應該被要求遍歷列表視圖項目和設置標誌。這個功能很不幸地試圖重新發明輪子:( – 2012-04-23 22:22:15

+0

但它完美的工作。 – alternatefaraz 2012-04-23 22:44:57

0

使用下面的代碼,

if(!lvi.ContainsKey(saLvwItem[1])) 
{ 
    ListViewItem lvi = new ListViewItem(saLvwItem[2]); //Or whatever value you want to show as name 
    listView1.Items.Add(lvi); 

} 

列表視圖對每個項目的鍵值設置,所以你不能設置四個屬性。你的鑰匙應該是唯一的,你的名字應該是你想要顯示的名字,你可以通過協商2個或更多的值來創建一個名字。

+0

它顯示在的containsKey – alternatefaraz 2012-04-23 21:51:27

+0

錯誤說的ListViewItem不包含ContainsKey的定義 – alternatefaraz 2012-04-23 21:52:01

+0

我們在談論相同的控制嗎?請檢查並確認,http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.listviewitemcollection.containskey.aspx – 2012-04-23 21:54:10