2012-04-23 103 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