Partager via


DataGridView.CellFormatting Événement

Définition

Se produit lorsque le contenu d’une cellule doit être mis en forme pour l’affichage.

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 

Type d'événement

Exemples

L’exemple de code suivant montre comment gérer l’événement 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

Remarques

Par défaut, le DataGridView contrôle tente de convertir la valeur d’une cellule dans un format adapté à l’affichage. Par exemple, elle convertit une valeur numérique en chaîne pour l’affichage dans une cellule de zone de texte. Vous pouvez indiquer la convention de mise en forme à utiliser en définissant la Format propriété de la DataGridViewCellStyle propriété retournée par des propriétés telles que la DefaultCellStyle propriété.

Si la mise en forme standard est insuffisante, vous pouvez personnaliser la mise en forme en gérant l’événement CellFormatting . Cet événement vous permet d’indiquer la valeur d’affichage exacte ainsi que les styles de cellule, tels que l’arrière-plan et la couleur de premier plan, à utiliser pour l’affichage de cellule. Cela signifie que vous pouvez gérer cet événement pour n’importe quel type de mise en forme de cellule, que la valeur de cellule elle-même ait besoin de mise en forme.

L’événement CellFormatting se produit chaque fois que chaque cellule est peinte. Vous devez donc éviter un traitement long lors de la gestion de cet événement. Cet événement se produit également lorsque la cellule FormattedValue est récupérée ou que sa GetFormattedValue méthode est appelée.

Lorsque vous gérez l’événement CellFormatting , la ConvertEventArgs.Value propriété est initialisée avec la valeur de cellule. Si vous fournissez une conversion personnalisée de la valeur de cellule en valeur d’affichage, définissez la ConvertEventArgs.Value propriété sur la valeur convertie, en veillant à ce que la nouvelle valeur soit du type spécifié par la propriété de cellule FormattedValueType . Pour indiquer qu’aucune autre mise en forme de valeur n’est nécessaire, définissez la DataGridViewCellFormattingEventArgs.FormattingApplied propriété truesur .

Lorsque le gestionnaire d’événements est terminé, si le type est ou n’est pas correct, ou si la propriété est , la ValueDataGridViewCellFormattingEventArgs.FormattingApplied propriété est falsemise en forme à l’aide du FormatNullValuestyle de cellule , DataSourceNullValueet FormatProvider les propriétés du style de cellule retourné par la DataGridViewCellFormattingEventArgs.CellStyle propriété, qui est initialisée à l’aide de la propriété de celluleInheritedStyle.nullConvertEventArgs.Value

Quelle que soit la valeur de la DataGridViewCellFormattingEventArgs.FormattingApplied propriété, les propriétés d’affichage de l’objet retourné par la DataGridViewCellFormattingEventArgs.CellStyle propriété sont utilisées pour afficher la cellule.

Pour plus d’informations sur la mise en forme personnalisée à l’aide de l’événement CellFormatting , consultez Guide pratique pour personnaliser la mise en forme des données dans le contrôle DataGridView Windows Forms.

Pour éviter les pénalités de performances lors de la gestion de cet événement, accédez à la cellule via les paramètres du gestionnaire d’événements plutôt que d’accéder directement à la cellule.

Pour personnaliser la conversion d’une valeur mise en forme spécifiée par l’utilisateur en une valeur de cellule réelle, gérez l’événement CellParsing .

Pour plus d’informations sur la gestion des événements, consultez Gestion et déclenchement d’événements.

S’applique à

Voir aussi