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)
您正在迭代它时修改集合.试试这样吧
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)