正規表現が目的の書式設定の表現に適さない場合は、FetchCellStyle イベントを使用して、フォントおよび色をセル単位でカスタマイズできます。このイベントは、列の FetchStyle プロパティが True に設定されている場合にだけ発生します。
たとえば、ある範囲内の値に、コード内で色を指定するとします。次のコードは、数値データを含むある列の FetchStyle プロパティが True であることを前提としています。このコードは、FetchCellStyle イベントを処理し、1000 より大きな値を青色で表示します。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Private Sub C1TrueDBGrid1_FetchCellStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs) Handles C1TrueDBGrid1.FetchCellSTyle
Dim N As Integer
N = Val(Me.C1TrueDBGrid1(e.Row, e.Col)
If N > 1000 Then
e.CellStyle.ForeColor = System.Drawing.Color.Blue
End If
End Sub
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
private void c1TrueDBGrid1_FetchCellStyle( object sender, C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs e)
{
int N;
N = (int) this.c1TrueDBGrid1[e.Row, e.Col];
if ( N > 1000 )
{
e.CellStyle.ForeColor = System.Drawing.Color.Blue;
}
}
|
|
Split, Row, Colの各引数で、グリッドに表示するセルを指定します。CellStyle引数によって、書式設定の情報がアプリケーションからグリッドに伝達されます。CellStyle 引数は Style オブジェクトなので、次のように、セルのフォントの特性を FetchCellStyle イベントで変更することもできます。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
If N > 1000 Then
e.CellStyle.Font.Italic = True
Dim myfont As Font
myfont = New Font (e.CellStyle.Font, FontStyle.Italic)
If N > 1000 Then
e.CellStyle.Font = myfont
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
if ( N > 1000 )
{
e.CellStyle.Font.Italic = true
}
Font myfont;
myfont = new Font (e.CellStyle.Font, FontStyle.Italic);
if ( N > 1000 )
{
e.CellStyle.Font = myfont;
}
|
|
if ( N > 1000 ) e.CellStyle.Font = myfont;また、FetchCellStyle イベントを使用して、他のセルの値や他のコントロールによって、書式設定をセルに適用することもできます。たとえば、次のように設定するとします。
この場合は、列4および列7の FetchStyle プロパティを True に設定し、FetchCellStyle イベントを次のように処理します。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Private Sub C1TrueDBGrid1_FetchCellStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs) Handles C1TrueDBGrid1.FetchCellStyle
Select Case e.Col
Case 4
Dim Col1 As Long, Col2 As Long
Col1 = CLng(Me.C1TrueDBGrid1(e.Row, 1))
Col2 = CLng(Me.C1TrueDBGrid1(e.Row, 2))
If Col1 - Col2 < 0 Then
CellStyle.ForeColor = System.Drawing.Color.Red
Case 7
Dim S As String
S = Me.C1TrueDBGrid1(e.Row, 7).ToString()
If S = TextBox1.Text Then
Dim myfont = New Font(CellStyle.Font, FontStyle.Bold)
CellStyle.Font = myfont
End If
Case Else
Debug.WriteLine ("FetchCellStyle not handled: " & e.Col)
End Select
End Sub
|
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
private void c1TrueDBGrid1_FetchCellStyle( object sender, C1.Win.C1TrueDBGrid.FetchCellStyleEventArgs e)
{
switch (e.Col)
{
case 4:
long Col1, long Col2;
Col1 = (long)this.c1TrueDBGrid1[e.Row, 1];
Col2 = (long)this.c1TrueDBGrid1[e.Row, 2];
if ( Col1 - Col2 < 0 )
CellStyle.ForeColor = System.Drawing.Color.Red
break;
case 7:
string S;
S = this.c1TrueDBGrid1[e.Row, 7].ToString();
if ( S == TextBox1.Text )
{
Font myfont = new Font(CellStyle.Font, FontStyle.Bold);
CellStyle.Font = myfont;
}
break;
default:
Console.WriteLine ("FetchCellStyle not handled: " + e.Col);
}
}
|
|
効率を高めるには、FetchCellStyle イベントで処理する列の FetchStyle だけを True に設定する必要があります。
メモ:前述の例では、CellText メソッドを使用して、コードを単純化しています。ただし、CellText メソッドおよび CellValue メソッドは、呼び出されるたびに、データセットの内部クローンを作成および破棄します。そのため、これらのメソッドは非効率的になり、FetchCellStyle イベントで使用できないことがあります。グリッドの表示サイクルのパフォーマンスを向上させるには、非連結アプリケーションを使用してみてください。非連結アプリケーションを使用すると、基礎データソースに直接アクセスできるため、CellText または CellValue を呼び出す場合に比べて、通常、処理が高速になります。
フォントおよび色を、セル単位ではなく行単位でカスタマイズするには、FetchRowStyle イベントを使用します。このイベントは、FetchRowStyles プロパティが True に設定されているグリッド内の列ごとに、一度だけ発生します。このイベントの構文は次のとおりです。
Visual Basic コードの書き方
| Visual Basic |
コードのコピー
|
|---|---|
Private Sub TDBGrid1_FetchRowStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles C1TrueDBGrid1.FetchRowStyle |
|
C# コードの書き方
| C# |
コードのコピー
|
|---|---|
private void TDBGrid1_FetchRowStyle( object sender, C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs e) |
|
FetchRowStyle イベントを使って1行ごとに行の色を互い違いにすることもできますが、AlternatingRows プロパティと組み込みの EvenRow スタイルおよび OddRow スタイルを使用すると、より簡単で効率よく同じタスクを実行できます。