HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


C# 2003の開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > C# 2003 Tips > コントロール > DataGrid Tips メニュー

22.列ごとに前景色と背景色を設定する

UPDATE:2004/09/14 

<< 前のTips  次のTips >>

 

 DataGridの列ごとに背景色と前景色を設定できるメソッドやプロパティを探したのですが見つけることができなかったためクラスを自作しました。
 列ごとのスタイルを設定する場合は通常DataGridTextBoxColumnやDataGridBoolColumnを使用します。 DataGridTextBoxColumnからの派生クラスDataGridTextColumnColorと、DataGridBoolColumn からの派生クラスDataGridBoolColumnColorを紹介します。
 それぞれのクラスにCellBackColorプロパティ、CellForeColorプロパティを作成し、背景色と前景色をセットできるようにしています。プロパティにセットした値はオーバーライドしたPaintメソッドで使用し、列の背景色と前景色を変更しています。

 
サンプル1
//DataGridTextColmunColor クラス
using System;
using System.Windows.Forms;
using System.Drawing;

/// <summary>
/// DataGridTextColmunColor クラス
/// </summary>
public class DataGridTextColumnColor : DataGridTextBoxColumn
{

    // メンバ変数の宣言
    System.Drawing.Color _CellBackColor;
    System.Drawing.Color _CellForeColor;

    // コンストラクタ
    public DataGridTextColumnColor()
    {
        // 背景色の初期値を白にセット
        _CellBackColor = System.Drawing.Color.White;
        // 前景色の初期値を黒にセット
        _CellForeColor = System.Drawing.Color.Black;
    }

    // 列の背景色を設定取得します
    public Color CellBackColor
    {
        set
        {
            _CellBackColor = value;
        }

        get
        {
            return _CellBackColor;
        }
    }

    // 列の前景色を設定取得します
    public Color CellForeColor
    {
        set
        {
            _CellBackColor = value;
        }

        get
        {
            return _CellBackColor;
        }
    }

    // Paintメソッドをオーバーライド
    protected override void Paint(
        Graphics g,
        Rectangle bounds,
        CurrencyManager source,
        int rowNum, Brush backBrush,
        Brush foreBrush,
        bool alignToRight)
    {
        //セルの値を取得します
        object cellValue = this.GetColumnValueAtRow(source, rowNum);

        // 前景色(文字)をセットします
        foreBrush = new SolidBrush(_CellForeColor);
        // 背景色をセットします
        backBrush = new SolidBrush(_CellBackColor);

        //基本クラスのPaintメソッドを呼び出します
        base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
    } 

}

//DataGridBoolColmunColor クラス
using System;
using System.Windows.Forms;
using System.Drawing;

/// <summary>
/// DataGridBoolColmunColor クラス
/// </summary>
public class DataGridBoolColumnColor : DataGridBoolBoxColumn
{

    // メンバ変数の宣言
    System.Drawing.Color _CellBackColor;
    System.Drawing.Color _CellForeColor;

    // コンストラクタ
    public DataGridTextColumnColor()
    {
        // 背景色の初期値を白にセット
        _CellBackColor = System.Drawing.Color.White;
        // 前景色の初期値を黒にセット
        _CellForeColor = System.Drawing.Color.Black;
    }

    // 列の背景色を設定取得します
    public Color CellBackColor
    {
        set
        {
            _CellBackColor = value;
        }

        get
        {
            return _CellBackColor;
        }
    }

    // 列の前景色を設定取得します
    public Color CellForeColor
    {
        set
        {
            _CellForeColor = value;
        }

        get
        {
            return _CellForeColor;
        }
    }

    // Paintメソッドをオーバーライド
    protected override void Paint(
        Graphics g,
        Rectangle bounds,
        CurrencyManager source,
        int rowNum, Brush backBrush,
        Brush foreBrush,
        bool alignToRight)
    {
        //セルの値を取得します
        object cellValue = this.GetColumnValueAtRow(source, rowNum);

        // 前景色(文字)をセットします
        foreBrush = new SolidBrush(_CellForeColor);
        // 背景色をセットします
        backBrush = new SolidBrush(_CellBackColor);

        //基本クラスのPaintメソッドを呼び出します
        base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
    } 

}


 
サンプル2
//使用方法
//クラスの使用方法ですが、
//①新しい列スタイルを作成する際にDataGridTextBoxColumnColorを用いて変数を宣言します。
//②プロパティのCellBackColorでその列の背景色を、CellForeColorで前景色を//それぞれ設定します。
//それ以外のコードの説明はコメントを参照してください。
private void Form1_Load(object sender, System.EventArgs e)

    dataSet1.ReadXml(@"C:\Work\Calendar.xml");

    // データセットに格納されているテーブル0を
    // DataTableオブジェクトに格納します
    DataTable dt = dataSet1.Tables[0];

    // 新しいテーブル スタイルを宣言し、そのマップ名を設定します。
    // マップ名にはテーブル名をセットします
    DataGridTableStyle DGTS = new DataGridTableStyle();
    DGTS.MappingName = dt.TableName;

    // ①新しい列スタイルを宣言します
    DataGridTextColumnColor style1 = new DataGridTextColumnColor();
    DataGridTextBoxColumn style2 = new DataGridTextBoxColumn();
    DataGridTextBoxColumn style3 = new DataGridTextBoxColumn();
    DataGridTextBoxColumn style4 = new DataGridTextBoxColumn();
    DataGridTextBoxColumn style5 = new DataGridTextBoxColumn();
    DataGridTextBoxColumn style6 = new DataGridTextBoxColumn();
    DataGridTextColumnColor style7 = new DataGridTextColumnColor();

    // ②
    // 列1の背景色を赤にセット
    style1.CellBackColor = System.Drawing.Color.Red;
    // 列7の背景色を青にセット
    style7.CellBackColor = System.Drawing.Color.Blue;
    // 列1の前景色を赤にセット
    style1.CellForeColor = System.Drawing.Color.White;
    // 列7の前景色を赤にセット
    style7.CellForeColor = System.Drawing.Color.White;

    // マップ名に列名を指定します
    style1.MappingName = dt.Columns[0].ColumnName;
    style2.MappingName = dt.Columns[1].ColumnName;
    style3.MappingName = dt.Columns[2].ColumnName;
    style4.MappingName = dt.Columns[3].ColumnName;
    style5.MappingName = dt.Columns[4].ColumnName;
    style6.MappingName = dt.Columns[5].ColumnName;
    style7.MappingName = dt.Columns[6].ColumnName;

    // ヘッダーテキストに列名をセットします
    style1.HeaderText = dt.Columns[0].ColumnName;
    style2.HeaderText = dt.Columns[1].ColumnName;
    style3.HeaderText = dt.Columns[2].ColumnName;
    style4.HeaderText = dt.Columns[3].ColumnName;
    style5.HeaderText = dt.Columns[4].ColumnName;
    style6.HeaderText = dt.Columns[5].ColumnName;
    style7.HeaderText = dt.Columns[6].ColumnName;

    // 作成した各列のスタイルDataGridTableStyleに追加します
    DGTS.GridColumnStyles.Add(style1);
    DGTS.GridColumnStyles.Add(style2);
    DGTS.GridColumnStyles.Add(style3);
    DGTS.GridColumnStyles.Add(style4);
    DGTS.GridColumnStyles.Add(style5);
    DGTS.GridColumnStyles.Add(style6);
    DGTS.GridColumnStyles.Add(style7);

    // 作成したテーブルスタイルをDataGrid1に追加する
    dataGrid1.TableStyles.Add(DGTS);

    // dataGridにデータを表示します
    dataGrid1.SetDataBinding(dataSet1, dataSet1.Tables[0].TableName);

}

//使用したXMLファイル
<?xml version="1.0" encoding="utf-8" ?>
<CALENDAR>
    <WEEK>
        <SUN></SUN>
        <MON></MON>
        <TUE></TUE>
        <WED>1</WED>
        <THU>2</THU>
        <FRI>3</FRI>
        <SAT>4</SAT>
    </WEEK>
    <WEEK>
        <SUN>5</SUN>
        <MON>6</MON>
        <TUE>7</TUE>
        <WED>8</WED>
        <THU>9</THU>
        <FRI>10</FRI>
        <SAT>11</SAT>
    </WEEK>
    <WEEK>
        <SUN>12</SUN>
        <MON>13</MON>
        <TUE>14</TUE>
        <WED>15</WED>
        <THU>16</THU>
        <FRI>17</FRI>
        <SAT>18</SAT>
    </WEEK>
    <WEEK>
        <SUN>19</SUN>
        <MON>20</MON>
        <TUE>21</TUE>
        <WED>22</WED>
        <THU>23</THU>
        <FRI>24</FRI>
        <SAT>25</SAT>
    </WEEK>
    <WEEK>
        <SUN>26</SUN>
        <MON>27</MON>
        <TUE>28</TUE>
        <WED>29</WED>
        <THU>30</THU>
        <FRI></FRI>
        <SAT></SAT>
    </WEEK>
</CALENDAR>