トップ回答者
dataGridViewの列を並べかえる

質問
-
の続きなのですが,dataGridView に 「あ」「い」「う」「え」「お」と並んでいる並んでいる列を「え」「お」「あ」「い」「う」と並べ変えたいと思って次のようなコードをかいてみました。
0 1 2 3 4
あ い う え お
int iTime=3; for(int i=0:i<iTime;i++) { dataGridView1.Columns[0].DisplayIndex=4 }
私の期待は
i=0 いうえおあ, i=1 うえおあい, i=2 えおあいう となることでしたが,「い」「う」「え」「お」「あ」になるだけでした。
何かの処理がたりないのでしょうか,それとも別の方法でないといけないのでしようか。
お教え願います。
回答
すべての返信
-
期待された結果をみるかぎり、DisplayIndex と Index を混同されているか、Columns[] のインデクサの意味を取り違えておられるようです。
DisplayIndex は、表示の並び順、Index はデータの並び順です。
Columns[] のインデクサに与えるのは、データの順序である Index です。つまり、表示の順序を変更してもデータの順序はかわりませんので、Columns[0] は常に "あ" を取得します。
すべての列を右に2つ移動したいのであれば、すべての列の DisplayIndex を設定する必要があります。foreach (DataGridViewColumn column in dataGridView1.Columns) { column.DisplayIndex = (column.Index + 2) % dataGridView1.Columns.Count; }
-
K.Takaokaさん,ありがとうございます。せっかく解説をしていただきましたのに,私には難しすぎて理解できませんでしたが,実際の場面では列名が偶然にも”c4DataGridViewCheckBoxColumn”となっておりましたので,これを基にanningoさんに教えていただいたように書いてみましたら,無事に完成できました。
anningoさん,K.Takaokaさんのお陰と感謝します。ありがとうございました。
private void tbxSmonth_TextChanged(object sender, EventArgs e) { string[] colName = new string[13]; int iMonth = 0; string sMonth = tbxSmonth.Text; if (sMonth != "") { iMonth = int.Parse(tbxSmonth.Text); if (iMonth >= 0 && iMonth <= 12) { for (int i = 0; i < 12; i++) { if (i != 0) iMonth += 1; if (iMonth == 13) iMonth = 1; colName[i] = "c" + iMonth.ToString() + "DataGridViewCheckBoxColumn"; meiboDataGridView.Columns[colName[i]].DisplayIndex = 6 + i; } } } }
-
I think he did the right thing
兎にも角にも、並び順が変わったということはゴールに近いということじゃないでしょうか。
for 文で i を変えているのに i を使っていないです。 <cite></cite>