Sdílet prostřednictvím


DataGridView.CellFormatting Událost

Definice

Nastane v případě, že obsah buňky musí být naformá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í se DataGridView 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í, které se mají použít, můžete určit nastavením Format vlastnosti DataGridViewCellStyle vrácené vlastnostmi, jako DefaultCellStyle je vlastnost.

Pokud standardní formátování není dostatečné, můžete ho přizpůsobit zpracováním CellFormatting události. Tato událost umožňuje určit přesnou zobrazovanou hodnotu a také styly buněk, například barvu pozadí a 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 vyžaduje formátování.

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

Při zpracování CellFormatting události ConvertEventArgs.Value je vlastnost inicializována s hodnotou buňky. Pokud zadáte vlastní převod z hodnoty buňky na zobrazenou hodnotu, nastavte ConvertEventArgs.Value vlastnost na převedenou hodnotu a ujistěte se, že nová hodnota je typu určeného vlastností buňky FormattedValueType . Pokud chcete označit, že není nutné žádné další formátování hodnot, nastavte DataGridViewCellFormattingEventArgs.FormattingApplied vlastnost na true.

Po dokončení obslužné rutiny události, pokud ConvertEventArgs.Value je null nebo není správného typu, nebo DataGridViewCellFormattingEventArgs.FormattingApplied vlastnost je false, Value je formátován pomocí Formatvlastností , NullValue, DataSourceNullValue, a FormatProvider stylu buňky vrácených DataGridViewCellFormattingEventArgs.CellStyle vlastností, která je inicializována pomocí vlastnosti buňky InheritedStyle .

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

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 model Windows Forms DataGridView.

Abyste se vyhnuli postihům výkonu při zpracování této události, přistupujte k buňce prostřednictvím parametrů obslužné rutiny události, a ne přímo 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í najdete v tématu Zpracování a vyvolávání událostí.

Platí pro

Viz také