DataGridView.CellFormatting Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возникает, когда требуется форматирование содержимого ячейки для отображения.
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
Тип события
Примеры
В следующем примере кода показано, как обрабатывать 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
Комментарии
По умолчанию элемент управления пытается преобразовать значение ячейки в формат, DataGridView подходящий для отображения. Например, оно преобразует числовое значение в строку для отображения в ячейке текстового поля. Вы можете указать используемое соглашение о форматировании, задав Format свойство объекта , DataGridViewCellStyle возвращаемое такими свойствами, как DefaultCellStyle свойство .
Если стандартного форматирования недостаточно, можно настроить форматирование, обрабатывая CellFormatting событие . Это событие позволяет указать точное отображаемое значение, а также стили ячеек, такие как цвет фона и переднего плана, которые будут использоваться для отображения ячейки. Это означает, что это событие можно обрабатывать для любого форматирования ячеек, независимо от того, требуется ли форматирование самого значения ячейки.
Событие CellFormatting возникает каждый раз, когда каждая ячейка окрашена, поэтому следует избегать длительной обработки при обработке этого события. Это событие также возникает при извлечении ячейки FormattedValue или вызове ее GetFormattedValue метода.
При обработке CellFormatting события свойство инициализируется ConvertEventArgs.Value значением ячейки. Если вы предоставляете пользовательское преобразование из значения ячейки в отображаемое значение, задайте ConvertEventArgs.Value для свойства преобразованное значение, гарантируя, что новое значение имеет тип, заданный свойством ячейки FormattedValueType . Чтобы указать, что дальнейшее форматирование значений не требуется, присвойте свойству DataGridViewCellFormattingEventArgs.FormattingApplied значение true
.
По завершении обработчика событий, если ConvertEventArgs.Value имеет или не имеет правильного типа или DataGridViewCellFormattingEventArgs.FormattingApplied свойство имеет false
значение , Value форматируется с помощью Formatсвойств , NullValueDataSourceNullValue, и FormatProvider стиля ячейки, возвращаемого свойством DataGridViewCellFormattingEventArgs.CellStyle , которое инициализируется с помощью свойства ячейки InheritedStylenull
.
Независимо от значения DataGridViewCellFormattingEventArgs.FormattingApplied свойства, свойства отображения объекта, возвращаемого свойством DataGridViewCellFormattingEventArgs.CellStyle , используются для отрисовки ячейки.
Дополнительные сведения о настраиваемом форматировании CellFormatting с помощью события см. в разделе How to: Customize Data Formatting in the Windows Forms DataGridView Control.
Чтобы избежать снижения производительности при обработке этого события, получите доступ к ячейке через параметры обработчика событий, а не напрямую.
Чтобы настроить преобразование отформатированного пользовательского значения в фактическое значение ячейки, обработайте CellParsing событие .
Дополнительные сведения об обработке событий см. в разделе Обработка и вызов событий.
Применяется к
См. также раздел
- 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
- Стили ячеек элемента управления DataGridView в Windows Forms
- Практическое руководство. Настройка форматирования данных элемента управления DataGridView в Windows Forms
- элемент управления DataGridView (Windows Forms)