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

DATAGRIDVIEW循环删除行的问题

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]);
请大家帮忙看看有没有更好的办法解决,谢谢 --------------------编程问答--------------------
为什么没有兄弟帮我看看呢。 --------------------编程问答-------------------- this.dgvLabel.Rows.Remove((DataGridViewRow)list[0])
就行了吧,删除一条,LIST应该会减1吧 --------------------编程问答-------------------- for (int i = 0; i < list.Count; i++)
{
    this.dgvLabel.Rows.Remove((DataGridViewRow)list[0]);
} --------------------编程问答--------------------

引用 3 楼 vingsa8352 的回复:
for (int i = 0; i < list.Count; i++)
{
    this.dgvLabel.Rows.Remove((DataGridViewRow)list[0]);
}


你这个0只是删除一条数据。。唉,我要做的是循环删除,主要是删除很慢。 --------------------编程问答-------------------- 。。。。。。。。。我再顶一下 --------------------编程问答-------------------- 你删除以后,后面的一行不就变成第0行了吗?主要循环删除第0行就行了 --------------------编程问答-------------------- 你删除第1行以后,后面的一行不就变成第1行了吗?循环删除第1行就行了  --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用 7 楼 vingsa8352 的回复:
你删除第1行以后,后面的一行不就变成第1行了吗?循环删除第1行就行了

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]的数据 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 用这个即可:
   for (int i = 0; i < dataGridViewX1.Rows.Count;i ++ )
                {
                    if (dataGridViewX1.Rows[i].Cells["gou"].Value.ToString() =="N") //未勾选的列
                    {
                        dataGridViewX1.Rows.RemoveAt(i);
                        i--; //关键在这里
                    }
                }
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,