正規表現が目的の書式設定の表現に適さない場合は、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 スタイルを使用すると、より簡単で効率よく同じタスクを実行できます。