C# のDataGridViewの選択された行の削除について質問があります。
C#
1namespace 行削除 2{ 3 public partial class Form1 : Form 4 { 5 public Form1() 6 { 7 InitializeComponent(); 8 } 9 10 private void Form1_Load(object sender, EventArgs e) 11 { 12 dataGridView1.ColumnCount = 4; 13 14 dataGridView1.Columns[0].HeaderText = "コード"; 15 dataGridView1.Columns[1].HeaderText = "商品名"; 16 dataGridView1.Columns[2].HeaderText = "数量"; 17 dataGridView1.Columns[3].HeaderText = "金額"; 18 19 } 20 21 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 22 { 23 24 } 25 26 private void button1_Click(object sender, EventArgs e) 27 { 28 DataGridViewSelectedRowCollection src = dataGridView1.SelectedRows; 29 for (int i = src.Count -1; i >= 0; i--) // この部分 30 { 31 dataGridView1.Rows.RemoveAt(src[i].Index); 32 } 33 } 34 } 35}
上記のコードの最後のfor分なのですが、for (int i = src.Count -1; i >= 0; i--) が
どういう働きをしているのかが、理解できず困っています。
ネットで調べたところ、「選択した行のインデックス番号がずれないように、末尾の方から削除します。」
と書いてありました。
お手数をおかけしますが、よろしくお願いいたします。
※Visual Studio 2019を使用しています。
※for文ついては理解しているつもりです。
for (int i = src.Count -1; i >= 0; i--)
このfor文でiがどのような値の遷移をするかは理解できていますか?
> 上記のコードの最後のfor分なのですが、for (int i = src.Count -1; i >= 0; i--) が
> どういう働きをしているのかが、理解できず困っています。
なぜ逆順にしなければならないかがわからないのか、for 文の機能自体を知らないのか、それを書くことで回答の精度が上がると思います。
YAmaGNZ さん
おそらくですが…。
表の3行目を選択したとき、インデックスは2なので-1をしていて、
i が0より大きい場合、i-- でデクリメントして行数を減らしている、でしょうか?
Zuishin さん
確かに、説明不足でした。
ご指摘いただいたように、説明を加えようと思います。
ちなみにfor文の機能については理解しているつもりです。
回答4件
あなたの回答
tips
プレビュー