1.一个打印程序,通过在DATAGRIDVIEW中选择CHECKBOX来打印数据,刚开始设想的是打印一条,删除一条,但是当把打印的那条数据删除后,DATAGRIDVIEW就刷新了,CHECKBOX选择的钩也刷新了,后面选择的就不打印了。
2.添加一个ARRAYLIST,每打印一条数据,添加一条到ARRAYLIST中,等打印完成后,再删除数据,但是问题就出现了,数据量比较大的时候,删除很慢,如果DATAGIRDVIEW中有5000数据,而打印的数据大余2000条数据,删除操作时有时候会造成程序报错。
部分代码如下:
       ArrayList list = new ArrayList();
       foreach (DataGridViewRow row in this.dgvLabel.Rows)
                    {
                        if ((bool)row.Cells[0].EditedFormattedValue == true)
                        {
                           打印;
                                 list.add(row);
                        }
                        } 
         for (int i = 0; i < list.Count; i++)
                    this.dgvLabel.Rows.Remove((DataGridViewRow)list[i]);
请大家帮忙看看有没有更好的办法解决,谢谢

解决方案 »

  1.   

    this.dgvLabel.Rows.Remove((DataGridViewRow)list[0])
    就行了吧,删除一条,LIST应该会减1吧
      

  2.   

    for (int i = 0; i < list.Count; i++)
    {
        this.dgvLabel.Rows.Remove((DataGridViewRow)list[0]);
    }
      

  3.   

    for (int i = 0; i < list.Count; i++)
     {
         this.dgvLabel.Rows.Remove((DataGridViewRow)list[0]);
     }
    这是删除LIST[0]的数据,你的意思就是,DATAGRIDVIEW删除LIST[0]里面的数据后,再删除LIST[0]?
    如果是这样的话,DATAGIRDVIEW肯定找不到这条数据了,因为LIST[0]的数据始终存在。除非删除数据的同时也删除LIST[0]的数据
      

  4.   

    用这个即可:
       for (int i = 0; i < dataGridViewX1.Rows.Count;i ++ )
                    {
                        if (dataGridViewX1.Rows[i].Cells["gou"].Value.ToString() =="N") //未勾选的列
                        {
                            dataGridViewX1.Rows.RemoveAt(i);
                            i--; //关键在这里
                        }
                    }