//在窗体加载的时候执行 foreach (crm p in ls)
       //    {
       //       AddProduct(p);
          
        //    }
       //循环添加实体到listview1
        private void AddProduct(crm p)
        {
                ListViewItem lvi; 
                lvi = new ListViewItem(p.Order.ToString());
                lvi.Tag = p.Id;              
                lvi.SubItems.Add(p.Name);            
                lvi.SubItems.Add(p.Tel.ToString());
                lvi.SubItems.Add(p.Qq.ToString());
                lvi.SubItems.Add(p.Address.ToString());
                listView1.Items.Add(lvi);
        }  List<int> list=new List<int>();
        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.listView1.SelectedItems.Count < 1)
            {
                return;
            }
            ListViewItem lvi = this.listView1.SelectedItems[0];
            selectid = (int)lvi.Tag;//保存的id赋值给它
            list.Add(selectid);
         }        //删除按钮
        private void button6_Click(object sender, EventArgs e)
        {            if (this.listView1.SelectedItems.Count < 1)
            {
                MessageBox.Show("请选择要删除的记录", "提示");
                return;
            }
            else
            {
              
                for (int i = 0; i < list.Count; i++)
                {
                    ProductDao.deleteById(list[i]);//数据操作层
                    ListViewItem lvi = this.listView1.SelectedItems[0];
                    
                    lvi.Remove();
                }
            }
          //............部分代码省略
         }当用户每选择listview里面的一条数据的时候,就会触发第一个事件,我就会用list存它的id,id是我在加载到listview的时候,已经存在tag里了,
当用户点击“删除”按钮的时候,我就会拿出刚才存起来的id集合,一条条的删除,并且从listview里面移除掉那条数据现在最大的问题是删除方法那里for方法,那个list很奇怪,每循环一次,list的count就加1了越来越大,是怎么回事呢?还是大家有什么另外的方法帮我实现相同的功能呢?

解决方案 »

  1.   

    代替了,估计也是一样的,list也是会不停的加1的
      

  2.   

     for (int i = 0; i < list.Count; i++)
                    {
                        ProductDao.deleteById(list[i]);//数据操作层
                        ListViewItem lvi = this.listView1.SelectedItems[0];
                        
                        lvi.Remove();
                    }
    写错了
    应该是listView1.Items.Remove(lvi);吧
      

  3.   

    ...???什么意思???
    现在最大的问题是删除方法那里for方法,那个list很奇怪,每循环一次,list的count就加1了越来越大,是怎么回事呢?
    count不可能+1, 最多你移除listitm时-1
      

  4.   

    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (this.listView1.SelectedItems.Count < 1)
                {
                    return;
                }
                ListViewItem lvi = this.listView1.SelectedItems[0];
                selectid = (int)lvi.Tag;//保存的id赋值给它
                 //修改这里,如果list里没有才添加
                  if(!list.Contains(selectid))
                  {
                     list.Add(selectid);
                 }
             }
      

  5.   

    写法有问题,当你在删除的时候也会引发listView1_SelectedIndexChanged这个事件,到这个事件时又去list.Add了,所以会不停的追加
      

  6.   

    看了一下你的代码,根本没有必要借助于List来保存曾经点击过的选项。
     if (this.listView1.SelectedItems.Count < 1)
                {
                    MessageBox.Show("请选择要删除的记录", "提示");
                    return;
                }
                else
                {
                   //直接删就行了啊。
                   ListViewItem lvi = this.listView1.SelectedItems[0];
                   ProductDao.deleteById((int)lvi.Tag);//数据操作层
                   listView1.Items.Remove(lvi);              }
                }
      

  7.   

    看一下你的AddProduct()这个方法是在什么地方调用的,是不是它的问题
    因为你里面是累加的,没用重置,所以会出现你说的问题,所以你需要用一下清空,那样就不会了,像这种问题你可以打上断点,调试一下,学着自己找一下错误,你可以看一下它走的过程,这样有助于你自己的提高
    记得是按F11祝你好运
      

  8.   

    晕。如果想删多条你循环你的 this.listView1.SelectedItes.Count
    逐条删除啊。