DataGridView.CellFormatting Událost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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é
- DefaultCellStyle
- DataGridViewCellStyle
- Format
- FormatProvider
- NullValue
- DataSourceNullValue
- InheritedStyle
- Value
- FormattedValue
- FormattedValueType
- GetFormattedValue(Object, Int32, DataGridViewCellStyle, TypeConverter, TypeConverter, DataGridViewDataErrorContexts)
- DataGridViewCellFormattingEventHandler
- DataGridViewCellFormattingEventArgs
- FormattingApplied
- CellStyle
- Value
- OnCellFormatting(DataGridViewCellFormattingEventArgs)
- CellParsing
- Styly buněk v ovládacím prvku Windows Forms DataGridView
- Postupy: Přizpůsobení formátování dat v ovládacím prvku Windows Forms DataGridView
- Ovládací prvek DataGridView (Windows Forms)