DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridViewセルの境界線、グリッド線を変更する

注意:DataGridViewコントロールは、.NET Framework 2.0で新しく追加されました。

DataGridView全体の境界線スタイルを変更する

DataGridViewの周りの境界線スタイルは、DataGridView.BorderStyleプロパティで変更できます。BorderStyleプロパティに設定できる値は、BorderStyle列挙体のFixedSingle(一重線の境界線、デフォルト)、Fixed3D(3D境界線)、None(境界線なし)のいずれかです。

VB.NET
コードを隠すコードを選択
'DataGridViewの境界線を3Dにする
DataGridView1.BorderStyle = BorderStyle.Fixed3D
C#
コードを隠すコードを選択
//DataGridViewの境界線を3Dにする
DataGridView1.BorderStyle = BorderStyle.Fixed3D;

セルの境界線スタイルを変更する

セルの境界線スタイルは、DataGridView.CellBorderStyleプロパティで変更できます。CellBorderStyleプロパティには、DataGridViewCellBorderStyle列挙値(Customを除く)を指定できます。DataGridViewCellBorderStyle列挙値とその意味は、以下の通りです(MSDN「DataGridViewCellBorderStyle 列挙体」からの抜粋)。

DataGridViewCellBorderStyle列挙体のメンバ名 説明
Custom カスタマイズされた境界線。
None 境界線なし。
Raised 3D の浮き出した境界線。
RaisedHorizontal 3D の浮き出した水平方向の境界線。
RaisedVertical 3D の浮き出した垂直方向の境界線。
Single 一重線の境界線。(デフォルト)
SingleHorizontal 水平方向の一重線の境界線。
SingleVertical 垂直方向の一重線の境界線。
Sunken 3D のくぼんだ境界線。
SunkenHorizontal 3D のくぼんだ水平方向の境界線。
SunkenVertical 3D のくぼんだ垂直方向の境界線。

また、ヘッダーセルの境界線スタイルは、DataGridView.ColumnHeadersBorderStyleとRowHeadersBorderStyleプロパティで変更できます。これらのプロパティには、DataGridViewHeaderBorderStyle列挙値(Customを除く)を指定できます。DataGridViewCellBorderStyle列挙値とその意味は、以下の通りです(MSDN「DataGridViewHeaderBorderStyle 列挙体」からの抜粋)。

DataGridViewHeaderBorderStyle列挙体のメンバ名 説明
Custom カスタマイズされた境界線。
None 境界線なし。
Raised(デフォルト) 3D の浮き出した境界線。
Single 一重線の境界線。
Sunken 3D のくぼんだ境界線。
VB.NET
コードを隠すコードを選択
'セルの境界線を水平方向の一重線にする
DataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal
'列ヘッダーの境界線をくぼんだ3Dにする
DataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Sunken
'行ヘッダーの境界線を一重線にする
DataGridView1.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
C#
コードを隠すコードを選択
//セルの境界線を水平方向の一重線にする
DataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal;
//列ヘッダーの境界線をくぼんだ3Dにする
DataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Sunken;
//行ヘッダーの境界線を一重線にする
DataGridView1.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;

セルの境界線の色を変更する

セルの境界線の色は、DataGridView.GridColorプロパティで変更できます。デフォルトは、ControlDarkDarkです。

ただしこの方法で色を変更できるのは、セルの境界線スタイルが一重線の場合のみです。つまり、CellBorderStyleプロパティでは、Single、SingleHorizontal、SingleVertical、ColumnHeadersBorderStyleおよびRowHeadersBorderStyleでは、Singleが設定されている時です。

補足:MSDN「DataGridView.GridColor プロパティ」によると、Application.EnableVisualStylesメソッドによりvisualスタイルが有効になっている時は、GridColorプロパティの色は使われないということです。しかし、私が試した限りでは、visualスタイルが有効となっている時でも、セルの境界線に関してはGridColorプロパティの色が使われました。ただし、ヘッダーセルの境界線に関しては、visualスタイルが有効になっていると、ヘッダー全体を囲む枠だけがGridColorプロパティの色になりました。visualスタイルを無効にすると、全てのヘッダーセルの境界線がGridColorプロパティの色になりました。つまり、DataGridView.EnableHeadersVisualStylesプロパティをFalseにしてヘッダーのvisualスタイルを無効にすれば、GridColorプロパティの色が使われます。
VB.NET
コードを隠すコードを選択
'セルの境界線を一重線にする
DataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.Single
'グリッド線の色を赤にする
DataGridView1.GridColor = Color.Red
C#
コードを隠すコードを選択
//セルの境界線を一重線にする
DataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.Single;
//グリッド線の色を赤にする
DataGridView1.GridColor = Color.Red;

セルの上下左右の境界線スタイルを個別に変更する

CellBorderStyleプロパティでは、組み込まれたスタイルにしかセルの境界線スタイルを変更できません。しかし、DataGridView.AdvancedCellBorderStyleプロパティで取得できるDataGridViewAdvancedBorderStyleオブジェクトのプロパティを変更することにより、セルの上下左右の境界線スタイルを別々に設定することができます。

以下の例では、セルの上と左を二重線のくぼんだ境界線にし、下と右を一重線のくぼんだ境界線にしています。

VB.NET
コードを隠すコードを選択
'セルの上と左を二重線のくぼんだ境界線にし、
'下と右を一重線のくぼんだ境界線にする
DataGridView1.AdvancedCellBorderStyle.Top = _
    DataGridViewAdvancedCellBorderStyle.InsetDouble
DataGridView1.AdvancedCellBorderStyle.Right = _
    DataGridViewAdvancedCellBorderStyle.Inset
DataGridView1.AdvancedCellBorderStyle.Bottom = _
    DataGridViewAdvancedCellBorderStyle.Inset
DataGridView1.AdvancedCellBorderStyle.Left = _
    DataGridViewAdvancedCellBorderStyle.InsetDouble
C#
コードを隠すコードを選択
//セルの上と左を二重線のくぼんだ境界線にし、
//下と右を一重線のくぼんだ境界線にする
DataGridView1.AdvancedCellBorderStyle.Top =
    DataGridViewAdvancedCellBorderStyle.InsetDouble;
DataGridView1.AdvancedCellBorderStyle.Right =
    DataGridViewAdvancedCellBorderStyle.Inset;
DataGridView1.AdvancedCellBorderStyle.Bottom =
    DataGridViewAdvancedCellBorderStyle.Inset;
DataGridView1.AdvancedCellBorderStyle.Left =
    DataGridViewAdvancedCellBorderStyle.InsetDouble;

AdvancedCellBorderStyle

DataGridViewAdvancedBorderStyleオブジェクトのTop、Bottom、Left、Rightプロパティに設定できるDataGridViewAdvancedCellBorderStyle列挙値は、以下の通りです(MSDN「DataGridViewAdvancedCellBorderStyle 列挙体」からの抜粋です)。
DataGridViewAdvancedCellBorderStyle列挙体のメンバ名 説明
Inset 一重線のくぼんだ境界線。
InsetDouble 二重線のくぼんだ境界線。
None 境界線なし。
NotSet 境界線が設定されていません。
Outset 一重線の浮き出した境界線。
OutsetDouble 二重線の浮き出した境界線。
OutsetPartial 浮き出した部分を含む一重線の境界線。
Single 一重線の境界線。

ただし、NotSetを設定することはできません。また、RightプロパティにはInsetDoubleやOutsetDoubleを設定できません(RightToLeftプロパティがfalseの時)。さらに、BottomプロパティにInsetDoubleやOutsetDoubleを設定するとおかしくなりますので(セルの下が描画されなくなる)、Bottomプロパティにもこれらの値を設定しないほうがよいでしょう。

AdvancedCellBorderStyleプロパティと同じように、列ヘッダーセルの境界線スタイルはAdvancedColumnHeadersBorderStyleプロパティで、行ヘッダーセルの境界線スタイルはAdvancedRowHeadersBorderStyleプロパティで変更できます。

補足:左上隅のヘッダーセル(列ヘッダーと行ヘッダーが交差する部分)の境界線スタイルは、AdvancedColumnHeadersBorderStyleで変更されますが、AdvancedRowHeadersBorderStyleでは変更されないようです。左上隅のヘッダーセルだけの境界線スタイルを変更するには、DataGridView.AdjustedTopLeftHeaderBorderStyleプロパティをオーバーライドします。

AdjustCellBorderStyleメソッド等をオーバーライドする

上記のようなお手軽な方法以外に、AdjustColumnHeaderBorderStyle、AdjustRowHeaderBorderStyle、AdjustCellBorderStyleメソッドや、AdjustedTopLeftHeaderBorderStyleプロパティをオーバーライドすることによってセルの上下左右の境界線スタイルを変更することもできます。この方法については、MSDNの「DataGridViewAdvancedBorderStyle クラス」をご覧ください。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。