DataGridView.CellFormatting Zdarzenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Występuje, gdy zawartość komórki musi być sformatowana do wyświetlenia.
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
Typ zdarzenia
Przykłady
Poniższy przykład kodu przedstawia sposób obsługi CellFormatting zdarzenia.
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
Uwagi
Domyślnie kontrolka DataGridView podejmie próbę przekonwertowania wartości komórki na format odpowiedni do wyświetlenia. Na przykład przekonwertuje wartość liczbową na ciąg do wyświetlania w komórce pola tekstowego. Można wskazać konwencję formatowania, która ma być używana, ustawiając Format właściwość DataGridViewCellStyle zwracaną przez właściwości, takie jak DefaultCellStyle właściwość.
Jeśli formatowanie standardowe jest niewystarczające, możesz dostosować formatowanie, obsługując CellFormatting zdarzenie. To zdarzenie pozwala wskazać dokładną wartość wyświetlaną, a także style komórek, takie jak tło i kolor pierwszego planu, do użycia na potrzeby wyświetlania komórek. Oznacza to, że można obsłużyć to zdarzenie dla dowolnego rodzaju formatowania komórek, niezależnie od tego, czy sama wartość komórki wymaga formatowania.
Zdarzenie występuje za każdym razem, gdy każda CellFormatting komórka jest malowana, więc należy unikać długiego przetwarzania podczas obsługi tego zdarzenia. To zdarzenie występuje również, gdy komórka FormattedValue jest pobierana lub wywoływana jest jej GetFormattedValue metoda.
Po obsłużeniu CellFormatting zdarzenia ConvertEventArgs.Value właściwość jest inicjowana przy użyciu wartości komórki. Jeśli podasz konwersję niestandardową z wartości komórki na wartość wyświetlaną, ustaw ConvertEventArgs.Value właściwość na przekonwertowaną wartość, upewniając się, że nowa wartość jest typu określonego przez właściwość komórki FormattedValueType . Aby wskazać, że nie jest konieczne żadne dalsze formatowanie wartości, ustaw DataGridViewCellFormattingEventArgs.FormattingApplied właściwość na true
wartość .
Po zakończeniu procedury obsługi zdarzeń, jeśli właściwość ConvertEventArgs.Value jest null
lub nie ma poprawnego typu, lub DataGridViewCellFormattingEventArgs.FormattingApplied właściwość ma false
wartość , Value parametr jest sformatowany przy użyciu Formatwłaściwości , NullValue, DataSourceNullValuei FormatProvider stylu komórki zwróconej przez DataGridViewCellFormattingEventArgs.CellStyle właściwość , która jest inicjowana przy użyciu właściwości komórki InheritedStyle .
Niezależnie od wartości DataGridViewCellFormattingEventArgs.FormattingApplied właściwości, właściwości wyświetlania obiektu zwróconego przez DataGridViewCellFormattingEventArgs.CellStyle właściwość są używane do renderowania komórki.
Aby uzyskać więcej informacji na temat formatowania niestandardowego CellFormatting przy użyciu zdarzenia, zobacz How to: Customize Data Formatting in the Windows Forms DataGridView Control (Instrukcje: dostosowywanie formatowania danych w kontrolce DataGridView).
Aby uniknąć kar za wydajność podczas obsługi tego zdarzenia, uzyskaj dostęp do komórki za pośrednictwem parametrów programu obsługi zdarzeń zamiast bezpośredniego uzyskiwania dostępu do komórki.
Aby dostosować konwersję sformatowanej wartości określonej przez użytkownika do rzeczywistej wartości komórki, obsłuż CellParsing zdarzenie.
Aby uzyskać więcej informacji na temat obsługi zdarzeń, zobacz Obsługa i podnoszenie zdarzeń.
Dotyczy
Zobacz też
- 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
- Style komórki w formancie DataGridView formularzy systemu Windows
- Instrukcje: dostosowywanie formatowania danych w kontrolce DataGridView formularzy systemu Windows
- DataGridView — Formant (Formularze systemu Windows)