VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。
基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。
DataGridの列ごとに背景色と前景色を設定できるメソッドやプロパティを探したのですが見つけることができなかったためクラスを自作しました。
列ごとのスタイルを設定する場合は通常DataGridTextBoxColumnやDataGridBoolColumnを使用します。 DataGridTextBoxColumnからの派生クラスDataGridTextColumnColorと、DataGridBoolColumn からの派生クラスDataGridBoolColumnColorを紹介します。
それぞれのクラスにCellBackColorプロパティ、CellForeColorプロパティを作成し、背景色と前景色をセットできるようにしています。プロパティにセットした値はオーバーライドしたPaintメソッドで使用し、列の背景色と前景色を変更しています。
//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); } }
//使用方法 //クラスの使用方法ですが、 //①新しい列スタイルを作成する際に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>