次の方法で共有


DataGridView.CellFormatting イベント

定義

セルの内容が、表示用に書式指定されなければならないときに発生します。

public:
 event System::Windows::Forms::DataGridViewCellFormattingEventHandler ^ CellFormatting;
public event System.Windows.Forms.DataGridViewCellFormattingEventHandler CellFormatting;
public event System.Windows.Forms.DataGridViewCellFormattingEventHandler? CellFormatting;
member this.CellFormatting : System.Windows.Forms.DataGridViewCellFormattingEventHandler 
Public Custom Event CellFormatting As DataGridViewCellFormattingEventHandler 

イベントの種類

次のコード例は、 イベントを処理する方法を CellFormatting 示しています。

void dataGridView1_CellFormatting( Object^ /*sender*/, DataGridViewCellFormattingEventArgs^ e )
{
   // If the column is the Artist column, check the
   // value.
   if ( this->dataGridView1->Columns[ e->ColumnIndex ]->Name->Equals( "Artist" ) )
   {
      if ( e->Value != nullptr )
      {
         // Check for the string "pink" in the cell.
         String^ stringValue = dynamic_cast<String^>(e->Value);
         stringValue = stringValue->ToLower();
         if ( (stringValue->IndexOf( "pink" ) > -1) )
         {
            DataGridViewCellStyle^ pinkStyle = gcnew DataGridViewCellStyle;

            //Change the style of the cell.
            pinkStyle->BackColor = Color::Pink;
            pinkStyle->ForeColor = Color::Black;
            pinkStyle->Font = gcnew System::Drawing::Font( "Times New Roman",8,FontStyle::Bold );
            e->CellStyle = pinkStyle;
         }
         
      }
   }
   else
   if ( this->dataGridView1->Columns[ e->ColumnIndex ]->Name->Equals( "Release Date" ) )
   {
      ShortFormDateFormat( e );
   }
}


//Even though the date internaly stores the year as YYYY, using formatting, the
//UI can have the format in YY.  
void ShortFormDateFormat( DataGridViewCellFormattingEventArgs^ formatting )
{
   if ( formatting->Value != nullptr )
   {
      try
      {
         System::Text::StringBuilder^ dateString = gcnew System::Text::StringBuilder;
         DateTime theDate = DateTime::Parse( formatting->Value->ToString() );
         dateString->Append( theDate.Month );
         dateString->Append( "/" );
         dateString->Append( theDate.Day );
         dateString->Append( "/" );
         dateString->Append( theDate.Year.ToString()->Substring( 2 ) );
         formatting->Value = dateString->ToString();
         formatting->FormattingApplied = true;
      }
      catch ( Exception^ /*notInDateFormat*/ ) 
      {
         // Set to false in case there are other handlers interested trying to
         // format this DataGridViewCellFormattingEventArgs instance.
         formatting->FormattingApplied = false;
      }

   }
}
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    // If the column is the Artist column, check the
    // value.
    if (this.dataGridView1.Columns[e.ColumnIndex].Name == "Artist")
    {
        if (e.Value != null)
        {
            // Check for the string "pink" in the cell.
            string stringValue = (string)e.Value;
            stringValue = stringValue.ToLower();
            if ((stringValue.IndexOf("pink") > -1))
            {
                e.CellStyle.BackColor = Color.Pink;
            }
        }
    }
    else if (this.dataGridView1.Columns[e.ColumnIndex].Name == "Release Date")
    {
        ShortFormDateFormat(e);
    }
}

//Even though the date internaly stores the year as YYYY, using formatting, the
//UI can have the format in YY.  
private static void ShortFormDateFormat(DataGridViewCellFormattingEventArgs formatting)
{
    if (formatting.Value != null)
    {
        try
        {
            System.Text.StringBuilder dateString = new System.Text.StringBuilder();
            DateTime theDate = DateTime.Parse(formatting.Value.ToString());

            dateString.Append(theDate.Month);
            dateString.Append("/");
            dateString.Append(theDate.Day);
            dateString.Append("/");
            dateString.Append(theDate.Year.ToString().Substring(2));
            formatting.Value = dateString.ToString();
            formatting.FormattingApplied = true;
        }
        catch (FormatException)
        {
            // Set to false in case there are other handlers interested trying to
            // format this DataGridViewCellFormattingEventArgs instance.
            formatting.FormattingApplied = false;
        }
    }
}
Private Sub dataGridView1_CellFormatting(ByVal sender As Object, _
    ByVal e As DataGridViewCellFormattingEventArgs) _
    Handles dataGridView1.CellFormatting
    ' If the column is the Artist column, check the
    ' value.
    If Me.dataGridView1.Columns(e.ColumnIndex).Name _
        = "Artist" Then
        If e.Value IsNot Nothing Then

            ' Check for the string "pink" in the cell.
            Dim stringValue As String = _
            CType(e.Value, String)
            stringValue = stringValue.ToLower()
            If ((stringValue.IndexOf("pink") > -1)) Then
                e.CellStyle.BackColor = Color.Pink
            End If

        End If
    ElseIf Me.dataGridView1.Columns(e.ColumnIndex).Name _
        = "Release Date" Then
        ShortFormDateFormat(e)
    End If
End Sub

'Even though the date internaly stores the year as YYYY, using formatting, the
'UI can have the format in YY.  
Private Shared Sub ShortFormDateFormat(ByVal formatting As DataGridViewCellFormattingEventArgs)
    If formatting.Value IsNot Nothing Then
        Try
            Dim dateString As System.Text.StringBuilder = New System.Text.StringBuilder()
            Dim theDate As Date = DateTime.Parse(formatting.Value.ToString())

            dateString.Append(theDate.Month)
            dateString.Append("/")
            dateString.Append(theDate.Day)
            dateString.Append("/")
            dateString.Append(theDate.Year.ToString().Substring(2))
            formatting.Value = dateString.ToString()
            formatting.FormattingApplied = True
        Catch notInDateFormat As FormatException
            ' Set to false in case there are other handlers interested trying to
            ' format this DataGridViewCellFormattingEventArgs instance.
            formatting.FormattingApplied = False
        End Try
    End If
End Sub

注釈

既定では、 DataGridView コントロールはセルの値を表示に適した形式に変換しようとします。 たとえば、テキスト ボックス セルに表示する文字列に数値を変換します。 プロパティなどのプロパティによって返される のDataGridViewCellStyleプロパティをFormat設定することで、使用する書式設定規則をDefaultCellStyle指定できます。

標準の書式設定が不十分な場合は、 イベントを処理して書式設定を CellFormatting カスタマイズできます。 このイベントを使用すると、正確な表示値と、セルの表示に使用する背景や前景色などのセル スタイルを指定できます。 つまり、セル値自体に書式設定が必要かどうかに関係なく、任意の種類のセルの書式設定に対してこのイベントを処理できます。

イベントは CellFormatting 、各セルが描画されるたびに発生するため、このイベントを処理する際に長い処理を避ける必要があります。 このイベントは、セル FormattedValue が取得されるか、その GetFormattedValue メソッドが呼び出されたときにも発生します。

イベントを CellFormatting 処理すると、 ConvertEventArgs.Value プロパティはセル値で初期化されます。 セル値から表示値へのカスタム変換を指定する場合は、 プロパティを ConvertEventArgs.Value 変換後の値に設定し、新しい値がセル FormattedValueType プロパティで指定された型であることを確認します。 それ以上の値の書式設定が必要ないことを示すには、 プロパティを DataGridViewCellFormattingEventArgs.FormattingApplied に設定します true

イベント ハンドラーが完了すると、 が null または が正しい型ではない場合、または DataGridViewCellFormattingEventArgs.FormattingApplied プロパティが の場合ConvertEventArgs.ValueValuefalse、 プロパティによってDataGridViewCellFormattingEventArgs.CellStyle返されるセル スタイルの 、NullValueDataSourceNullValue、および FormatProvider プロパティを使用してFormat書式設定されます。このプロパティは、セル InheritedStyle プロパティを使用して初期化されます。

プロパティの値に DataGridViewCellFormattingEventArgs.FormattingApplied 関係なく、 プロパティによって返されるオブジェクトの表示プロパティは DataGridViewCellFormattingEventArgs.CellStyle 、セルのレンダリングに使用されます。

イベントを使用したCellFormattingカスタム書式設定の詳細については、「How to: Customize Data Formatting in the Windows フォーム DataGridView Control」を参照してください。

このイベントを処理するときにパフォーマンスが低下しないようにするには、セルに直接アクセスするのではなく、イベント ハンドラーのパラメーターを使用してセルにアクセスします。

書式設定されたユーザー指定の値を実際のセル値に変換するようにカスタマイズするには、 イベントを処理します CellParsing

イベントを処理する方法の詳細については、次を参照してください。処理とイベントの発生します。

適用対象

こちらもご覧ください