当前位置:编程学习 > C#/ASP.NET >>

ListView移动项的问题

我想实现ListView中,遍历一项,如果文本不相同就移除,如果相同就不移除
我代码如下,怎么不行呢?


              ListViewItem lv = new ListViewItem();
              lv = listView1.Items[listView1.FocusedItem.Index];
              int ind = listView1.FocusedItem.Index;
              string billno = lv.SubItems[1].Text.Trim();//点击任一项,取出一个文件字符Billno
              for (int x = 0; x < listView1.Items.Count;x++ )
              {
                  if (listView1.Items[x].SubItems[1].Text.Trim() != billno)//如果不同就移除这行
                  {
                      listView1.Items.Remove(listView1.Items[x]);  
                  }
                  
              }  
--------------------编程问答-------------------- 似乎觉得您只是实例化了LV来过滤已有ListView的重复项.如果真是如此,那您可以通过其他方法来过滤重复.
当然,如果您是需要"点击某项后再过滤",那么您的代码中:
listView1.FocusedItem.Index;
或许可以改成:
ListView1.SelectedItems(0).Index; --------------------编程问答-------------------- - -!是从数据库添加进LISTVIEW的话!~添加的时候直接做判断就好了……这样好像挺复杂的!新手路过…… --------------------编程问答-------------------- 看不懂你的代码。 --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 看不太明白。没明白意思。 --------------------编程问答-------------------- 楼主,安全移除的办法是,从最后往最前遍历,而不是从小到大……楼主体会一下…… --------------------编程问答-------------------- 代码改错:

ListViewItem lv = listView1.FocusedItem;
int ind = listView1.FocusedItem.Index;
string billno = lv.SubItems[1].Text.Trim();//点击任一项,取出一个文件字符Billno
for (int x = 0; x < listView1.Items.Count;x++ )
{
    if (listView1.Items[x].SubItems[1].Text.Trim() != billno)//如果不同就移除这行
     {
         listView1.Items.Remove(listView1.Items[x]);  
         x--;
    }
                  
}  
--------------------编程问答-------------------- 顶一下
--------------------编程问答-------------------- 在遍历集合时移除元素是有问题的. 可以在遍历ListView时将符合条件的项保存到一个数组,然后遍历该数组,从ListView中移除元素.  --------------------编程问答--------------------
引用 9 楼 photoplan 的回复:
在遍历集合时移除元素是有问题的. 可以在遍历ListView时将符合条件的项保存到一个数组,然后遍历该数组,从ListView中移除元素.


用foreach遍历确实是需要这样处理

如果用for遍历,就要按7楼方式处理,关键就是x--;那一句 --------------------编程问答--------------------
引用 5 楼 hello101105 的回复:
看不太明白。没明白意思。


从小往大移除的时候,Index会发生变化,另外Count也会发生变化。



ListViewItem lv = new ListViewItem();
              lv = listView1.Items[listView1.FocusedItem.Index];
              int ind = listView1.FocusedItem.Index;
              string billno = lv.SubItems[1].Text.Trim();//点击任一项,取出一个文件字符Billno
              int count = listView1.Items.Count;
              for (int x = count-1; x >=0;x-- )
              {
                  //移除代码。                  
              }  



--------------------编程问答-------------------- 帮你顶。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,