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 подходящий для отображения. Например, оно преобразует числовое значение в строку для отображения в ячейке текстового поля. Вы можете указать используемое соглашение о форматировании, задав Format свойство объекта , DataGridViewCellStyle возвращаемое такими свойствами, как DefaultCellStyle свойство .

Если стандартного форматирования недостаточно, можно настроить форматирование, обрабатывая CellFormatting событие . Это событие позволяет указать точное отображаемое значение, а также стили ячеек, такие как цвет фона и переднего плана, которые будут использоваться для отображения ячейки. Это означает, что это событие можно обрабатывать для любого форматирования ячеек, независимо от того, требуется ли форматирование самого значения ячейки.

Событие CellFormatting возникает каждый раз, когда каждая ячейка окрашена, поэтому следует избегать длительной обработки при обработке этого события. Это событие также возникает при извлечении ячейки FormattedValue или вызове ее GetFormattedValue метода.

При обработке CellFormatting события свойство инициализируется ConvertEventArgs.Value значением ячейки. Если вы предоставляете пользовательское преобразование из значения ячейки в отображаемое значение, задайте ConvertEventArgs.Value для свойства преобразованное значение, гарантируя, что новое значение имеет тип, заданный свойством ячейки FormattedValueType . Чтобы указать, что дальнейшее форматирование значений не требуется, присвойте свойству DataGridViewCellFormattingEventArgs.FormattingApplied значение true.

По завершении обработчика событий, если ConvertEventArgs.Value имеет или не имеет правильного типа или DataGridViewCellFormattingEventArgs.FormattingApplied свойство имеет falseзначение , Value форматируется с помощью Formatсвойств , NullValueDataSourceNullValue, и FormatProvider стиля ячейки, возвращаемого свойством DataGridViewCellFormattingEventArgs.CellStyle , которое инициализируется с помощью свойства ячейки InheritedStylenull.

Независимо от значения DataGridViewCellFormattingEventArgs.FormattingApplied свойства, свойства отображения объекта, возвращаемого свойством DataGridViewCellFormattingEventArgs.CellStyle , используются для отрисовки ячейки.

Дополнительные сведения о настраиваемом форматировании CellFormatting с помощью события см. в разделе How to: Customize Data Formatting in the Windows Forms DataGridView Control.

Чтобы избежать снижения производительности при обработке этого события, получите доступ к ячейке через параметры обработчика событий, а не напрямую.

Чтобы настроить преобразование отформатированного пользовательского значения в фактическое значение ячейки, обработайте CellParsing событие .

Дополнительные сведения об обработке событий см. в разделе Обработка и вызов событий.

Применяется к

См. также раздел