私はwinformでDataGridViewを持っています。以下は、問題を再現する作業サンプルです。グリッドには、チェックボックスとテキストボックスの2つの列があります。私は2行のデータを作成しています。DataGridViewで複数の行を削除するにはどうすればよいですか?
私はループスルーし、チェックされた行を取得します。それから私はそれらを削除しようとします。行を削除しているループでは、最初の繰り返しでうまくいく。 r.Index
は0です。
第2の反復は、物事が崩壊するところです。 r.Index
は-1になり、r.Cells[1].Value
はnullになります。
なぜこれが起こっているのですか、これらの行を削除する正しい方法は何ですか?
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