VB.NET で列固定を「解除」する方法[プログラミング]
(2024-03-22 12:45:35) by shinoda


VB.NET で DataGridView で作成した表の列固定(Excelで「ウィンドウ枠の固定」って言うやつやね)を行いたい。
それも、動的に。

ある検索条件で取得したデータを展開したときは 2列目で、他の検索条件のときは 5列目を・・・みたいな感じ。

IF hogehoge THEN
    dataGrid1.Columns(1).Frozen = True
ELSE
    dataGrid1.Columns(4).Frozen = True
END IF

こんなんでいいかなと。

そしたら、一旦 5列目で列固定したあとに 2列目の列固定に戻らないのよ。
.Columns(1).Frozen = True を実行しても、列固定は 5列目で行われているまま。

もしかして、現在設定中の列固定位置を一旦クリアしてからセットし直せばいいのかな?と思って、

IF hogehoge THEN
    dataGrid1.Columns(4).Frozen = False
    dataGrid1.Columns(1).Frozen = True
ELSE
    dataGrid1.Columns(1).Frozen = False
    dataGrid1.Columns(4).Frozen = True
END IF

とかやってみたけど状況変わらず。
ただ、.Columns(4).Frozen = False ってやると、5列目じゃなく 4列目が固定されているな。列固定が左にひとつ動いた(笑)

どうも、.Columns(4).Frozen = True とした時点で、5列目まで全列で列固定が True になってるんだな(^^;
だから、.Columns(1).Frozen = True としても、もともと 1〜5列目まで全て True になっている状態なので何も変わらない(^^;

というわけで、Frozen のセットをする前に、

FOR i AS Integer 0 TO dataGrid1.Columns.Count - 1 
    dataGrid1.Columns(i).Frozen = False
NEXT

してから処理するようにしたら、無事、2列目の固定が有効になった。

しかし、多分、なんか一発で Frozen をクリアする方法はあるんだろうな(笑)。Frozen そのものを有効/無効にするプロパティがあるみたいなんで、あれで一旦無効にすれば Frozen の設定は一旦全クリアされるかもしれんね。もう動いてるんで試してみないけど(笑)

ところで、ネット上を調べてみたけど、こういう動的に固定列を変更して云々みたいな説明しているページ、ひとつもなかったな。
皆、Microsoft や有名ブロガーのページのコピーばかりで「列固定する方法」しか載ってない。役に立たんわぁ〜(^^;

コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8