DataGridView.CellFormatting Gebeurtenis

Definitie

Treedt op wanneer de inhoud van een cel moet worden opgemaakt voor weergave.

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 

Gebeurtenistype

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u de CellFormatting gebeurtenis kunt afhandelen.

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

Opmerkingen

Standaard probeert het besturingselement de DataGridView waarde van een cel te converteren naar een indeling die geschikt is voor weergave. Hiermee wordt bijvoorbeeld een numerieke waarde geconverteerd naar een tekenreeks voor weergave in een tekstvakcel. U kunt aangeven welke opmaakconventie moet worden gebruikt door de Format eigenschap van de DataGridViewCellStyle geretourneerde eigenschap in te stellen door eigenschappen zoals de DefaultCellStyle eigenschap.

Als de standaardopmaak onvoldoende is, kunt u de opmaak aanpassen door de CellFormatting gebeurtenis af te handelen. Met deze gebeurtenis kunt u de exacte weergavewaarde en de celstijlen, zoals achtergrond- en voorgrondkleur, aangeven voor de weergave van de cel. Dit betekent dat u deze gebeurtenis kunt afhandelen voor elk type celopmaak, ongeacht of de celwaarde zelf opmaak nodig heeft.

De CellFormatting gebeurtenis treedt elke keer op wanneer elke cel wordt geschilderd, dus u moet langdurige verwerking voorkomen bij het verwerken van deze gebeurtenis. Deze gebeurtenis treedt ook op wanneer de cel FormattedValue wordt opgehaald of de GetFormattedValue methode wordt aangeroepen.

Wanneer u de CellFormatting gebeurtenis verwerkt, wordt de ConvertEventArgs.Value eigenschap geïnitialiseerd met de celwaarde. Als u een aangepaste conversie van de celwaarde naar de weergavewaarde opgeeft, stelt u de ConvertEventArgs.Value eigenschap in op de geconverteerde waarde, zodat de nieuwe waarde van het type is dat is opgegeven door de celeigenschap FormattedValueType . Als u wilt aangeven dat er geen verdere waardeopmaak nodig is, stelt u de DataGridViewCellFormattingEventArgs.FormattingApplied eigenschap in op true.

Wanneer de gebeurtenis-handler is voltooid, of als dit ConvertEventArgs.Value niet het juiste type is null of als de DataGridViewCellFormattingEventArgs.FormattingApplied eigenschap is, wordt falsede Value notatie gebruikt met de Format, NullValue, en DataSourceNullValueFormatProvidereigenschappen van de celstijl geretourneerd door de DataGridViewCellFormattingEventArgs.CellStyle eigenschap, die wordt geïnitialiseerd met behulp van de celeigenschapInheritedStyle.

Ongeacht de waarde van de DataGridViewCellFormattingEventArgs.FormattingApplied eigenschap worden de weergave-eigenschappen van het object dat door de DataGridViewCellFormattingEventArgs.CellStyle eigenschap wordt geretourneerd, gebruikt om de cel weer te geven.

Zie CellFormatting voor meer informatie over aangepaste opmaak met de gebeurtenis .

Als u prestatiestraffen wilt voorkomen bij het verwerken van deze gebeurtenis, opent u de cel via de parameters van de gebeurtenis-handler in plaats van rechtstreeks toegang te krijgen tot de cel.

Als u de conversie van een opgemaakte, door de gebruiker opgegeven waarde in een werkelijke celwaarde wilt aanpassen, verwerkt u de CellParsing gebeurtenis.

Zie Gebeurtenissen verwerken en genereren voor meer informatie over het afhandelen van gebeurtenissen.

Van toepassing op

Zie ook