Sdílet prostřednictvím


DataGridView.CellFormatting Událost

Definice

Nastane, když obsah buňky musí být formátován pro zobrazení.

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 

Event Type

Příklady

Následující příklad kódu ukazuje, jak zpracovat CellFormatting událost.

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

Poznámky

Ve výchozím nastavení DataGridView se ovládací prvek pokusí převést hodnotu buňky do formátu vhodného pro zobrazení. Převede například číselnou hodnotu na řetězec pro zobrazení v buňce textového pole. Konvence formátování, kterou chcete použít, můžete označit nastavením Format vlastnosti DataGridViewCellStyle vrácené vlastnostmi, jako je například DefaultCellStyle vlastnost.

Pokud standardní formátování není dostatečné, můžete formátování přizpůsobit zpracováním CellFormatting události. Tato událost umožňuje určit přesnou zobrazovanou hodnotu i styly buněk, jako je pozadí a barva popředí, které se mají použít pro zobrazení buňky. To znamená, že tuto událost můžete zpracovat pro jakýkoli druh formátování buněk bez ohledu na to, jestli samotná hodnota buňky potřebuje formátování.

K CellFormatting události dochází při každém vykreslení každé buňky, takže při zpracování této události byste se měli vyhnout zdlouhavému zpracování. K této události také dochází, když je buňka FormattedValue načtena nebo její GetFormattedValue metoda je volána.

Při zpracování CellFormatting události ConvertEventArgs.Value se vlastnost inicializuje s hodnotou buňky. Pokud zadáte vlastní převod z hodnoty buňky na zobrazovanou hodnotu, nastavte ConvertEventArgs.Value vlastnost na převedenou hodnotu, čímž zajistíte, že nová hodnota je typu určeného vlastností buňky FormattedValueType . Chcete-li označit, že není nutné žádné další formátování hodnoty, nastavte DataGridViewCellFormattingEventArgs.FormattingApplied vlastnost na truehodnotu .

Po dokončení obslužné rutiny události, pokud ConvertEventArgs.Value je nebo null není ve správném typu, nebo DataGridViewCellFormattingEventArgs.FormattingApplied je falsevlastnost je , je Value formátována pomocí Format, NullValue, DataSourceNullValuea FormatProvider vlastnosti stylu buňky vrácené DataGridViewCellFormattingEventArgs.CellStyle vlastností, která je inicializována pomocí vlastnosti buňky InheritedStyle .

Bez ohledu na hodnotu DataGridViewCellFormattingEventArgs.FormattingApplied vlastnosti se k vykreslení buňky používají vlastnosti zobrazení objektu DataGridViewCellFormattingEventArgs.CellStyle vráceného vlastností.

Další informace o vlastním formátování pomocí CellFormatting události naleznete v tématu Postupy: Přizpůsobení formátování dat v ovládacím prvku Windows Forms DataGridView.

Abyste se vyhnuli sankcím za výkon při zpracování této události, přejděte k buňce prostřednictvím parametrů obslužné rutiny události místo přímého přístupu k buňce.

Pokud chcete přizpůsobit převod formátované hodnoty zadané uživatelem na skutečnou hodnotu buňky, zpracujte CellParsing událost.

Další informace o zpracování událostí naleznete v tématu Zpracování a vyvolávání událostí.

Platí pro

Viz také