2017-08-25 11 views
0

私はdatagridviewとヘッダーチェックボックスを使用して、チェックボックス列のすべてのチェックボックス(すべてのチェックボックス0の列のインデックス)をチェックします。 Iは、削除ボタンイベントのコードを以下た:ループ内で削除されたが、私の行が増加し続けるようC#のチェックボックスを選択して、複数の行をデータグリッドビューから削除するにはどうすればよいですか?

for (int i = 0; i < datagridview.Rows.Count; i++) { 
      if (Convert.ToBoolean(datagridview.Rows[i].Cells[0].Value) == true) { 
       datagridview.Rows.RemoveAt(i); 
      } 
     } 

datagridview.rows.countは減少し続けます。したがって、チェックされたすべての行を削除するのではなく、それらの一部だけを削除します。それは私がコードを増やすと、DataGridview内の新しいデータで行インデックス0,1,2などのものを削除しません。

+0

最初の繰り返しでremove(i)を実行すると0になり、その下の行はインデックス0に移動しますが、現在は1になっているため、逆に削除します。 –

答えて

0

問題はキープが削除にインデックスを増やすことによって、あなたは、リスト内の次の項目をスキップしていることである。反復0の

0: [X] Item 0 
1: [X] Item 1 
2: [X] Item 2 

...私たちは、インデックス0 OK

Item 0を削除反復1の
0: [X] Item 1 
1: [X] Item 2 

...我々は、インデックス1にItem 2を削除しても、我々はをスキップ

for (int i = datagridview.Rows.Count; i >= 0 ; i--) 
{ 
    // .... 
} 
:したがって、あなたは、逆の順序で項目を削除し、そのようにリストを反復処理する必要があり、 前の項目のインデックスはまだ同じである指標になりました0

です

+1

あなたは "今はインデックス0になっている"という意味だと思います。 –

+0

@CharlesMayああ、そうです。古典的な1つのエラーでオフ。 – Xiaoy312

+0

これも機能します。 @ Xiaoy312ありがとう! – Krish

0

チャールズからのヒントを得た後、私はこの問題を以下のように解決しました。ありがとうございました!

関連する問題