Поделиться через


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.Valuenull он является или не имеет правильного типа, или DataGridViewCellFormattingEventArgs.FormattingApplied свойство falseимеет значение , Value оно отформатировано с помощью Formatсвойства , NullValueDataSourceNullValueи FormatProvider свойств стиля DataGridViewCellFormattingEventArgs.CellStyle ячейки, возвращаемого свойством, который инициализирован с помощью свойства ячейкиInheritedStyle.

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

Дополнительные сведения о пользовательском форматировании с помощью CellFormatting события см. в статье "Практическое руководство. Настройка форматирования данных в элементе управления DataGridView в Windows Forms".

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

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

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

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

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