日期:2014-05-19  浏览次数:20841 次

DataGridView 删除行问题 100分
这个问题我第三次问了。
首先,我的DataGridView是不绑定数据的,是用来输入数据以保存的,所以我设定它的属性是可以添加行,删除行。
现在添加行可以实现了。DataGridView.Rows.Add()方法就能在末尾添加一新行。
但是却无法删除。刚开始时用DataGridView.Rows[i].Remove()方法竞然还出错“无法删除未提交的新行”,后来参考了一位大哥的,在前面加一行DataGridView.EndEdit();不出错了,但还是无法删除。
看我的代码:
  private   void   button1_Click(object   sender,   EventArgs   e)
                {
                        dgvList.EndEdit();
                        dgvList.DataSource   =   null;  
                        for   (int   i   =   0;   i   <   dgvList.Rows.Count-1;   i++)
                        {                                
                                dgvList.Rows.Remove(dgvList.Rows[i]);                                

                        }
                     
                }
这是个清空的按钮,只是测试一下,不想用DataGridView.Rows.Clear(),因为不是每行都要删除的,我要的功能就是符合条件的留下来,不符合的才删除。
现在又出个新问题,就是用循环竞然不能一次性删除,非要运行好几次,才删除完。
我郁闷死了,哪位大侠帮帮我,为这问题我苦恼了好几天了。
请认真看完后再做回答,如果你的回答就是一句DataGridView.Rows[i].Remove(),我服了你了。

------解决方案--------------------
楼主呢

问题解决得怎么样了?
回个话啊
------解决方案--------------------
private void button1_Click(object sender, EventArgs e)
{
while(dataGridView1.Rows.Count-1> 0)
{
dataGridView1.Rows.Remove(dataGridView1.Rows[0]);

}
}
------解决方案--------------------
给你个算法,虽然别扭,但还是能解决你这个问题:

for(int i=0; i < dgvList.Rows.Count -1;i++)
{
if (dgvList.Rows[i].Cells[0].Value == null || dgvList.Rows[i].Cells[0].Value.ToString() == " ")
{
dgvList.Rows.RemoveAt(i--);
continue;
}

//下面是其他不删除的行的代码
······
}

您先试试,如果不行,明天再来看,先回去吃饭了,实在饿得不行了~~~
今天第一次来csdn,学习了不少东西,希望能与各位一起进步!!
------解决方案--------------------
dgvList.Rows.RemoveAt(i--) 执行后,原来的第i+1行变为第i行了,continue后操作的是目前的第i+1行,跳过了原来的第i+1行(现在变成第i行了)。

唉,有时候一些简单的问题能把人的头弄晕 -_-