DataGridViewの外観設定について

解決


fumofumo  2009-04-13 19:34:41  No: 141824

VB2005 WinXP(SP3) Oracle9i で開発しています。

DataGridViewの列幅、列ヘッダ名、列の表示 等の設定で
列の追加のしやすい(※) コーディングを探しています。
下記に現在のコーディング(一部抜粋)を書きますので
こうした方が早く、見やすいといったご意見、ご指摘のほど
宜しくお願い致します。

※ 例:5列設定している2列目と3列目の間に5列追加して10列に
      する時にかかる時間が短いコーディング方法

'-- 書式 --
DataGridView_Tab1.Columns(3).DefaultCellStyle.Format = "###,###,##0"
DataGridView_Tab1.Columns(4).DefaultCellStyle.Format = "###,###,##0"
DataGridView_Tab1.Columns(5).DefaultCellStyle.Format = "###,###,##0"
DataGridView_Tab1.Columns(6).DefaultCellStyle.Format = "###,###,##0"
DataGridView_Tab1.Columns(7).DefaultCellStyle.Format = "###,###,##0"
DataGridView_Tab1.Columns(8).DefaultCellStyle.Format = "###,###,##0"
DataGridView_Tab1.Columns(9).DefaultCellStyle.Format = "###,###,##0"
DataGridView_Tab1.Columns(10).DefaultCellStyle.Format = "###,###,##0"
DataGridView_Tab1.Columns(11).DefaultCellStyle.Format = "###,###,##0"
DataGridView_Tab1.Columns(12).DefaultCellStyle.Format = "###,###,##0"
DataGridView_Tab1.Columns(13).DefaultCellStyle.Format = "###,###,##0"

'-- 列ヘッダ背景色設定 --
DataGridView_Tab1.Columns(3).HeaderCell.Style.BackColor = Color.Azure
DataGridView_Tab1.Columns(4).HeaderCell.Style.BackColor = Color.Azure
DataGridView_Tab1.Columns(5).HeaderCell.Style.BackColor = Color.Azure
DataGridView_Tab1.Columns(6).HeaderCell.Style.BackColor = Color.Azure
DataGridView_Tab1.Columns(7).HeaderCell.Style.BackColor = Color.Azure
DataGridView_Tab1.Columns(8).HeaderCell.Style.BackColor = Color.Azure
DataGridView_Tab1.Columns(9).HeaderCell.Style.BackColor = Color.Azure

'-- 列ヘッダ名設定 --
DataGridView_Tab1.Columns(0).HeaderText = W_BunruiK1Mei
DataGridView_Tab1.Columns(1).HeaderText = W_BunruiK1Mei
DataGridView_Tab1.Columns(2).HeaderText = "項目"
DataGridView_Tab1.Columns(3).HeaderText = "7日前"
DataGridView_Tab1.Columns(4).HeaderText = "6日前"        DataGridView_Tab1.Columns(5).HeaderText = "5日前"        DataGridView_Tab1.Columns(6).HeaderText = "4日前"        DataGridView_Tab1.Columns(7).HeaderText = "3日前"        DataGridView_Tab1.Columns(8).HeaderText = "2日前"        DataGridView_Tab1.Columns(9).HeaderText = "1日前"        DataGridView_Tab1.Columns(10).HeaderText = "今日"        DataGridView_Tab1.Columns(11).HeaderText = "明日"        DataGridView_Tab1.Columns(12).HeaderText = "明後日        DataGridView_Tab1.Columns(13).HeaderText = "明々後日"

'-- 列ヘッダ名表示位置設定 --
DataGridView_Tab1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter

'-- 列ヘッダの幅設定 --
DataGridView_Tab1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing

DataGridView_Tab1.ColumnHeadersHeight = 40

DataGridView_Tab1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing

'-- セルの表示位置設定 --
DataGridView_Tab1.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomLeft

DataGridView_Tab1.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomLeft  

'-- 列ヘッダポップアップ --
DataGridView_Tab1.Columns(3).ToolTipText = Today.AddDays(-7).ToString("yy年MM月dd日(ddd)")
DataGridView_Tab1.Columns(4).ToolTipText = Today.AddDays(-6).ToString("yy年MM月dd日(ddd)")

'-- 列サイズ設定 --
DataGridView_Tab1.Columns(0).Width = 100
DataGridView_Tab1.Columns(1).Width = 100
DataGridView_Tab1.Columns(2).Width = 80        DataGridView_Tab1.Columns(3).Width = 70        DataGridView_Tab1.Columns(4).Width = 70       DataGridView_Tab1.Columns(5).Width = 70        DataGridView_Tab1.Columns(6).Width = 70        DataGridView_Tab1.Columns(7).Width = 70        DataGridView_Tab1.Columns(8).Width = 70        DataGridView_Tab1.Columns(9).Width = 70        DataGridView_Tab1.Columns(10).Width = 70        DataGridView_Tab1.Columns(11).Width = 70        DataGridView_Tab1.Columns(12).Width = 70        DataGridView_Tab1.Columns(13).Width = 70


魔界の仮面弁士  2009-04-13 22:26:55  No: 141825

> こうした方が早く、見やすいといったご意見
掲示板投稿時に、改行の入れ忘れ(と行頭の 8 文字空白の除去忘れ)によって
読みにくくなっているという点は抜きにして…。

> DataGridView_Tab1.Columns(3).DefaultCellStyle.Format = "###,###,##0"
> DataGridView_Tab1.Columns(3).HeaderCell.Style.BackColor = Color.Azure

同じ設定が複数の行/列/セル等で繰り返される場合において、それぞれのセルに
個別に設定を行っていくことは出来る限り避けてください。今回のような場合には、
設定数分の DataGridViewCellStyle のインスタンスを用意してから、それを
Style 系プロパティに対して割り当てていく方が望ましいとされています。
  Dim style1 As New DataGridViewCellStyle()
  style1.Format = 〜
  〜.DefaultCellStyle = style1

[セル スタイルの効率的な使用]
http://msdn.microsoft.com/ja-jp/library/ha5xt0d9%28VS.80%29.aspx

スタイル以外(HeaderText や Width)等については、今のままで良いかと思います。

強いて言えば、「DataGridView_Tab1.Columns」までの部分を
  Dim cols As DataGridViewColumnCollection
  cols = DataGridView_Tab1.Columns
のように、別の変数に受けておくと、
  cols(3).HeaderText = "7日前"
  cols(4).HeaderText = "6日前"
のように短く書けて、コードがスッキリするかも知れません。
(あるいは、With ブロックを使うという手もあります)


fumofumo  2009-04-14 17:16:36  No: 141826

魔界の仮面弁士さん
アドバイスありがとうございます。

>掲示板投稿時に、改行の入れ忘れ(と行頭の 8 文字空白の除去忘れ)によっ
>て読みにくくなっているという点は抜きにして…。
以後気をつけます。

>同じ設定が複数の行/列/セル等で繰り返される場合において、
>それぞれのセ>ルに個別に設定を行っていくことは出来る限り
>避けてください。今回のような場合には、設定数分の >DataGridViewCellStyle のインスタンスを用意してから、
>それをStyle 系プロパティに対して割り当てていく方が
>望ましいとされています。
DataGridViewCellStyle を使用してコーディングして
いきます。

魔界の仮面弁士さんはDataGridView に列を追加する時、
例えば10列設定している状態で、左から4列目の後ろに
2列追加する
とか 左から3列目を一番後ろに移動する時はどうされて
いますか?
差し支えなければご教授下さい。

私は、列を追加する時
①既存の設定している行をコピーして追加する列分を追加
  する列番号の箇所に挿入。
②全体の列番号を修正。
という風にしているのですが、
全体の列数が多くなると①②の作業に時間がかなり
かかってしまします。
①②の作業時間を短縮したいと考えています。
宜しくお願いします。


魔界の仮面弁士  2009-04-15 11:17:48  No: 141827

> DataGridView に列を追加する時、
デザイナで設定してしまう事が多いので、あまり気にしたことがありません。
コードで行うにしても、列の途中挿入・削除は自由に行えますから、
特に問題は無いような気がします。

> 全体の列番号を修正。
そもそも列番号で管理する事が無いため、列番号を修正する必要が生じません。
普段は、列名あるいは DataGridViewColumn のインスタンスで管理しています。


fumofumo  2009-04-15 22:03:30  No: 141828

魔界の仮面弁士さん
いろいろとアドバイスありがとうございました。

>そもそも列番号で管理する事が無いため、列番号を修正する必要が生じません。
確かに列名で管理すれば列番号を修正する必要はありませんね^^;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加