dポイントプレゼントキャンペーン実施中!

VB2005です
DataGridViewで
+ ヘッダ + 項目名1 + 項目名2 + 項目名3 + 項目名4 +
列の順序変更で
+ ヘッダ + 項目名3 + 項目名2 + 項目名4 + 項目名1 +
とした場合

i = DataGridView1.CurrentCell.ColumnIndex
Label1.Text = DataGridView1.Columns(i).HeaderText

としてヘッダ項目名を取得できましたが、

For x=0 to DataGridView1.ColumnCount - 1
として、セルの左から順番に項目名を取得するにはいかがしたらよろしいでしょうか?

コードでCurrentCellを移動する方法も合わせて教えて下さい。
また上記2行のコードをもっとスマートに書けないでしょうか?

A 回答 (1件)

表示順を変更したところで、各列のIndex番号は保持されたままなので、左から順に~となるとDisplayIndexを参照することになります。


割と面倒くさいんだけど

'ヘッダ名とDisplayIndex(表示上のインデックス)を格納するテーブル作成
Dim dt As New DataTable
dt.Columns.Add("Header", GetType(String))
dt.Columns.Add("Disp", GetType(Integer))

'ヘッダ名とDisplayIndex(表示上のインデックス)を格納
For Each dgvCols As DataGridViewColumn In DataGridView1.Columns
dt.Rows.Add(dgvCols.HeaderText, dgvCols.DisplayIndex)
Next

'DisplayIndexで、データをソート
Dim dv As DataView = New DataView(dt)
dv.Sort = "Disp"

'ソートしたデータを頭から順にコンソールに出力
For Each drv As DataRowView In dv
Console.WriteLine(drv.Item("Header").ToString)
Next

こうやると左から順にヘッダ名が取得できます。
もっといい方法あるのかな?

●CurrentCellをコードで移動させる方法は、例えば
DataGridView1.CurrentCell = DataGridView1(1, 2)
とかになります。
また、
i = DataGridView1.CurrentCell.ColumnIndex
Label1.Text = DataGridView1.Columns(i).HeaderText
これをスマートに書くなら
Label1.Text = DataGridView1.CurrentCell.OwningColumn.HeaderText
となります。
    • good
    • 0
この回答へのお礼

CurrentCellを移動させる方法
DataGridView1.CurrentCell.OwningColumn.HeaderText
理解できました。

順序変更の方については、もっと簡単な一発で得る方法があるかと思ってましたが「う~~ん」残念です。

DelphiからVBに乗換えたばかりで、ちょっとつらいです。

ありがとうございます。

お礼日時:2007/07/19 17:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!