えムナウのプログラミングのページ

えムナウ の とどけもの

 Logo えムナウBlog@AILight
えムナウBlog@Wankuma

目次

利用状況

イメージ ギャラリー

カテゴリ

Links
 

inetaj

MSMVPロゴ
MSMVP Visual C# 2005/01-2007/12

DataGridViewコントロール−行ヘッダータイトルを描画する

Helpによる行ヘッダーのラベルを設定するのは以下のとおりです。
どういうわけかコンストラクタに入れてもは動作しなかった。
Loadイベントだと動作します。
この場合は前景色や背景色は無視されます。


private void Form1_Load(object sender, EventArgs e)
{
	int rowNumber = 1;
	foreach (DataGridViewRow row in dataGridView1.Rows)
	{
		if (row.IsNewRow) continue;
		row.HeaderCell.Value = "Row" + rowNumber;
		rowNumber = rowNumber + 1;
	}
	dataGridView1.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);
}

RowPostPaint イベントで行ヘッダーのタイトルを描画できます。
行番号を表示するには以下のような例になります。
RowHeadersDefaultCellStyleで形式を設定できます。
この場合は前景色や背景色は描画されます。
背景色はTextRenderer.DrawTextでパラメータを指定しなければ描画されません。


private TextFormatFlags MakeFromCellStyle(DataGridViewCellStyle style)
{
	TextFormatFlags flags = new TextFormatFlags();
	switch( style.Alignment )
	{
	case DataGridViewContentAlignment.TopLeft: flags |= TextFormatFlags.Top | TextFormatFlags.Left ; break;
	case DataGridViewContentAlignment.TopCenter: flags |= TextFormatFlags.Top | TextFormatFlags.HorizontalCenter ; break;
	case DataGridViewContentAlignment.TopRight: flags |= TextFormatFlags.Top | TextFormatFlags.Right ; break;
	case DataGridViewContentAlignment.MiddleLeft: flags |= TextFormatFlags.VerticalCenter| TextFormatFlags.Left; break;
	case DataGridViewContentAlignment.MiddleCenter: flags |= TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter; break;
	case DataGridViewContentAlignment.MiddleRight: flags |= TextFormatFlags.VerticalCenter | TextFormatFlags.Right; break;
	case DataGridViewContentAlignment.BottomLeft: flags |= TextFormatFlags.Bottom | TextFormatFlags.Left; break;
	case DataGridViewContentAlignment.BottomCenter: flags |= TextFormatFlags.Bottom | TextFormatFlags.HorizontalCenter; break;
	case DataGridViewContentAlignment.BottomRight: flags |= TextFormatFlags.Bottom | TextFormatFlags.Right; break;
	}
	if (style.WrapMode == DataGridViewTriState.True) flags |= TextFormatFlags.WordBreak;
	return flags;
}

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
	DataGridViewCellStyle style = dataGridView1.RowHeadersDefaultCellStyle;
	TextFormatFlags flags = MakeFromCellStyle(style);
	Rectangle rowBounds = new Rectangle(
		style.Padding.Left,
		e.RowBounds.Top + style.Padding.Top,
		dataGridView1.RowHeadersWidth - style.Padding.Right,
		e.RowBounds.Height - style.Padding.Right);
	SolidBrush forebrush = new SolidBrush(style.ForeColor);
	TextRenderer.DrawText(e.Graphics, "Row" + e.RowIndex.ToString(), style.Font, rowBounds,
		style.ForeColor, style.BackColor, flags);
}