DataGridView.CellFormatting Evento
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Si verifica quando il contenuto di una cella deve essere formattato per la visualizzazione.
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
Tipo evento
Esempio
Nell'esempio di codice seguente viene illustrato come gestire l'evento 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
Commenti
Per impostazione predefinita, il controllo tenterà di convertire il DataGridView valore di una cella in un formato adatto per la visualizzazione. Ad esempio, convertirà un valore numerico in una stringa per la visualizzazione in una cella di una casella di testo. È possibile indicare la convenzione di formattazione da utilizzare impostando la Format proprietà dell'oggetto DataGridViewCellStyle restituito dalle proprietà, ad esempio la DefaultCellStyle proprietà .
Se la formattazione standard non è sufficiente, è possibile personalizzare la formattazione gestendo l'evento CellFormatting . Questo evento consente di indicare il valore di visualizzazione esatto e gli stili di cella, ad esempio il colore di sfondo e di primo piano, da utilizzare per la visualizzazione delle celle. Ciò significa che è possibile gestire questo evento per qualsiasi tipo di formattazione delle celle, indipendentemente dal fatto che il valore della cella stesso richieda la formattazione.
L'evento CellFormatting si verifica ogni volta che ogni cella viene disegnata, pertanto è consigliabile evitare un'elaborazione lunga durante la gestione di questo evento. Questo evento si verifica anche quando la cella FormattedValue viene recuperata o viene chiamato il relativo GetFormattedValue metodo.
Quando si gestisce l'evento CellFormatting , la ConvertEventArgs.Value proprietà viene inizializzata con il valore della cella. Se si specifica la conversione personalizzata dal valore della cella al valore visualizzato, impostare la ConvertEventArgs.Value proprietà sul valore convertito, assicurandosi che il nuovo valore sia del tipo specificato dalla proprietà cell FormattedValueType . Per indicare che non è necessaria un'ulteriore formattazione del valore, impostare la DataGridViewCellFormattingEventArgs.FormattingApplied proprietà su true.
Al termine del gestore eventi, se ConvertEventArgs.Value è o non è del tipo corretto oppure la proprietà è false, Value viene DataGridViewCellFormattingEventArgs.FormattingApplied formattata utilizzando le Formatproprietà , NullValueDataSourceNullValue, e FormatProvider dello stile di cella restituito dalla DataGridViewCellFormattingEventArgs.CellStyle proprietà , che viene inizializzata utilizzando la proprietà cell InheritedStylenull.
Indipendentemente dal valore della DataGridViewCellFormattingEventArgs.FormattingApplied proprietà, le proprietà di visualizzazione dell'oggetto restituito dalla DataGridViewCellFormattingEventArgs.CellStyle proprietà vengono utilizzate per eseguire il rendering della cella.
Per altre informazioni sulla formattazione personalizzata tramite l'evento CellFormatting , vedere Procedura: Personalizzare la formattazione dei dati nel controllo DataGridView di Windows Form.
Per evitare penalità per le prestazioni durante la gestione di questo evento, accedere alla cella tramite i parametri del gestore eventi anziché accedere direttamente alla cella.
Per personalizzare la conversione di un valore formattato specificato dall'utente in un valore di cella effettivo, gestire l'evento CellParsing .
Per altre informazioni su come gestire gli eventi, vedere Gestione e generazione di eventi.
Si applica a
Vedi anche
- 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
- Stili di cella nel controllo DataGridView di Windows Form
- Procedura: Personalizzare la formattazione dei dati nel controllo DataGridView di Windows Form
- Controllo DataGridView (Windows Form)