如何删除数据网格视图中选中复选框的行?

mas*_*san 8 .net c# checkbox datagridview

我正在使用C#.NET 2.0 Visual Studio 2005.

我遇到了奇怪的问题.

有一个简单的窗口形式,只有一个DataGridView,其中column1是复选框(DataGridViewCheckboxColumn).

然后,如果选中单元格中的复选框,我想删除选中的行.

声音非常简单,但它不会以某种方式删除所有已检查的行,我无法确定为什么它以这种方式表现.

例如,我有5行并检查每行中的所有复选框,但它只删除3行.谁看过这个吗?这是一个错误还是我做错了什么?

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //when I click the button, all checked row should be removed
        private void button1_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if ((bool)row.Cells[0].Value)
                {
                    dataGridView1.Rows.Remove(row);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

lov*_*nce 10

当一行被删除时,它会发生行计数减少,所以如果你把你的代码放入for循环并反向运行它会工作正常看看:

for (int i = dataGridView1.Rows.Count -1; i >= 0 ; i--)
{
    if ((bool)dataGridView1.Rows[i].Cells[0].FormattedValue)
    {
        dataGridView1.Rows.RemoveAt(i);
    }
}
Run Code Online (Sandbox Code Playgroud)


Che*_*rot 6

在迭代它时,你会修改一个集合.

使用删除列表,然后删除行.


Raj*_*eev 6

您正在迭代它时修改集合.试试这样吧

List<DataGridViewRow> toDelete = new List<DataGridViewRow>();
foreach (DataGridViewRow row in dataGridView1.Rows) {
    if (row.Cells[0].Value == true) {
        toDelete.Add(row);
    }
}
foreach (DataGridViewRow row in toDelete) {
    dataGridView1.Rows.Remove(row);
}
Run Code Online (Sandbox Code Playgroud)