複雑なセルごとのカスタマイズの実行が必要な場合、OwnerDrawCell イベントのハンドラを記述して、セルのコンテンツをレンダリングできます。このイベントはOwnerDraw プロパティが True に設定されたセルのコンテンツを表示するために必要に応じて発生します。

上記のようにオーナー描画セルを作成するには、以下を実行します。
デザイナの場合



コードの場合
次のコードを Form_Load イベントに追加します。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Me.C1TrueDBGrid1.Splits(0).DisplayColumns("First").OwnerDraw = True
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
this.c1TrueDBGrid1.Splits[0].DisplayColumns["First"].OwnerDraw = true; |
|
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Public Structure RECT
Dim Left As Long
Dim Top As Long
Dim Right As Long
Dim Bottom As Long
End Structure
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
public struct RECT{
long Left;
long Top;
long Right;
long Bottom;
}
|
|
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Private Sub C1TrueDBGrid1_OwnerDrawCell(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.OwnerDrawCellEventArgs) Handles C1TrueDBGrid1.OwnerDrawCell
If e.Col = 0 Then
' 青色から赤色へのグラデーションブラシを作成します。
Dim pt1, pt2 As Point
pt1 = New Point(e.CellRect.X, e.CellRect.Y)
pt2 = New Point(e.CellRect.Right, e.CellRect.Y)
Dim linGrBrush As System.Drawing.Drawing2D.LinearGradientBrush
linGrBrush = New System.Drawing.Drawing2D.LinearGradientBrush(pt1, pt2, Color.Blue, Color.Red)
Dim rt As RectangleF
rt = New RectangleF(e.CellRect.X, e.CellRect.Y, e.CellRect.Width, e.CellRect.Height)
' セル矩形をグラデーションで塗りつぶします。
e.Graphics.FillRectangle(linGrBrush, e.CellRect)
Dim whiteBR As Brush
whiteBR = New SolidBrush(Color.White)
Dim dispCol As C1.Win.C1TrueDBGrid.C1DisplayColumn
dispCol = Me.C1TrueDBGrid1.Splits(0).DisplayColumns(e.Col)
' テキストを水平に中央揃えにします。
Dim sfmt As New StringFormat()
sfmt.Alignment = StringAlignment.Center
' テキストを描画します。
e.Graphics.DrawString(dispCol.DataColumn.CellText(e.Row), dispCol.Style.Font, whiteBR, rt, sfmt)
whiteBR.Dispose()
' グリッドにイベントが処理されたことを知らせます。
e.Handled = True
End If
End Sub
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
private void C1TrueDBGrid1_OwnerDrawCell(object sender, C1.Win.C1TrueDBGrid.OwnerDrawCellEventArgs e)
{
if ( e.Col = 0 )
{
// 青色から赤色へのグラデーションブラシを作成します。
Point pt1, pt2;
pt1 = new Point[e.CellRect.X, e.CellRect.Y];
pt2 = new Point[e.CellRect.Right, e.CellRect.Y];
System.Drawing.Drawing2D.LinearGradientBrush linGrBrush;
linGrBrush = new System.Drawing.Drawing2D.LinearGradientBrush(pt1, pt2, Color.Blue, Color.Red);
RectangleF rt;
rt = new RectangleF(e.CellRect.X, e.CellRect.Y, e.CellRect.Width, e.CellRect.Height);
// セル矩形をグラデーションで塗りつぶします。
e.Graphics.FillRectangle(linGrBrush, e.CellRect);
Brush whiteBR;
whiteBR = new SolidBrush(Color.White);
C1.Win.C1TrueDBGrid.C1DisplayColumn dispCol;
dispCol = this.c1TrueDBGrid1.Splits[0].DisplayColumns[e.Col];
// テキストを水平に中央揃えにします。
StringFormat sfmt = new StringFormat();
sfmt.Alignment = StringAlignment.Center;
// テキストを描画します。
e.Graphics.DrawString(dispCol.DataColumn.CellText[e.Row], dispCol.Style.Font, whiteBR, rt, sfmt);
whiteBR.Dispose();
// グリッドにイベントが処理されたことを知らせます。
e.Handled = true;
}
}
|
|
この例には注意すべきいくつかの要点があります。