DataGridView.CellFormatting Événement

Définition

Se produit lorsque le contenu d'une cellule doit être mis en forme pour être affiché.

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, il convertit une valeur numérique en chaîne pour l’afficher 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 l’objet DataGridViewCellStyle retourné 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 la 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 la cellule elle-même ait besoin ou non d’une 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 propriété sur DataGridViewCellFormattingEventArgs.FormattingAppliedtrue.

Une fois le gestionnaire d’événements terminé, si le ConvertEventArgs.Value est ou n’est pas du type correct, ou si la propriété est false, le DataGridViewCellFormattingEventArgs.FormattingApplied est mis en forme à l’aide ValueFormatdes propriétés , NullValue, DataSourceNullValueet FormatProvider du style de cellule retourné par la DataGridViewCellFormattingEventArgs.CellStyle propriété, qui est initialisé à l’aide de la propriété de cellule InheritedStylenull.

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 restituer la cellule.

Pour plus d’informations sur la mise en forme personnalisée à l’aide de l’événementCellFormatting, 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 valeur de cellule réelle, gérez l’événement CellParsing .

Pour plus d’informations sur la façon de gérer les événements, consultez gestion et déclenchement d’événements.

S’applique à

Voir aussi