【发布时间】:2020-03-05 02:47:18
【问题描述】:
我在 winform 上有一个 DataGridView。下面是一个重现问题的工作示例。网格有两列 - 复选框和文本框。我正在创建两行数据。
我循环并得到任何选中的行。然后我尝试删除它们。在我删除行的循环中,第一次迭代一切顺利。 r.Index 为 0。
进入第二次迭代是事情崩溃的地方。 r.Index 现在为 -1,r.Cells[1].Value 为空。
为什么会发生这种情况以及删除这些行的正确方法是什么?
public Form1()
{
List<data> dataList = new List<data>();
dataList.Add(new data() {IsChecked=true, dept="dept1"});
dataList.Add(new data() {IsChecked=true, dept="dept2"});
BindingListView<data> view = new BindingListView<data>(dataList);
dataGridView1.DataSource = view;
var rows = SelectedRows();
foreach (DataGridViewRow r in rows) {
var name = r.Cells[1].Value.ToString();
dataGridView1.Rows.Remove(r);
}
List<DataGridViewRow> SelectedRows() {
List<DataGridViewRow> rows = new List<DataGridViewRow>();
foreach (DataGridViewRow row in dataGridView1.Rows) {
if (Convert.ToBoolean(row.Cells[0].Value)) {
rows.Add(row);
}
}
return rows;
}
}
public class data
{
public bool IsChecked {get;set;}
public string dept {get;set;}
}
BindingListView 类来自这里:http://blw.sourceforge.net
【问题讨论】:
标签: c# winforms datagridview