Share via


DataGridView.CellFormatting Kejadian

Definisi

Terjadi ketika konten sel perlu diformat untuk ditampilkan.

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 

Jenis Acara

Contoh

Contoh kode berikut menunjukkan cara menangani CellFormatting peristiwa.

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

Keterangan

Secara default, DataGridView kontrol akan mencoba mengonversi nilai sel menjadi format yang cocok untuk ditampilkan. Misalnya, ini akan mengonversi nilai numerik menjadi string untuk ditampilkan dalam sel kotak teks. Anda dapat menunjukkan konvensi pemformatan yang akan digunakan dengan mengatur Format properti yang DataGridViewCellStyle dikembalikan oleh properti seperti DefaultCellStyle properti .

Jika pemformatan standar tidak mencukupi, Anda bisa mengkustomisasi pemformatan dengan menangani CellFormatting peristiwa. Kejadian ini memungkinkan Anda menunjukkan nilai tampilan yang tepat serta gaya sel, seperti latar belakang dan warna latar depan, untuk digunakan untuk tampilan sel. Ini berarti Anda dapat menangani peristiwa ini untuk semua jenis pemformatan sel, terlepas dari apakah nilai sel itu sendiri membutuhkan pemformatan.

Peristiwa terjadi CellFormatting setiap kali setiap sel dicat, jadi Anda harus menghindari pemrosesan panjang saat menangani peristiwa ini. Peristiwa ini juga terjadi ketika sel FormattedValue diambil atau metodenya GetFormattedValue dipanggil.

Saat Anda menangani CellFormatting peristiwa, properti diinisialisasi ConvertEventArgs.Value dengan nilai sel. Jika Anda memberikan konversi kustom dari nilai sel ke nilai tampilan, atur ConvertEventArgs.Value properti ke nilai yang dikonversi, memastikan bahwa nilai baru adalah jenis yang ditentukan oleh properti sel FormattedValueType . Untuk menunjukkan bahwa tidak ada pemformatan nilai lebih lanjut yang diperlukan, atur properti ke DataGridViewCellFormattingEventArgs.FormattingAppliedtrue.

Ketika penanganan aktivitas selesai, jika ConvertEventArgs.Value adalah null atau bukan jenis yang benar, atau DataGridViewCellFormattingEventArgs.FormattingApplied properti adalah false, Value diformat menggunakan Formatproperti , NullValue, DataSourceNullValue, dan FormatProvider dari gaya sel yang dikembalikan oleh DataGridViewCellFormattingEventArgs.CellStyle properti , yang diinisialisasi menggunakan properti sel InheritedStyle .

Terlepas dari DataGridViewCellFormattingEventArgs.FormattingApplied nilai properti , properti tampilan objek yang dikembalikan oleh DataGridViewCellFormattingEventArgs.CellStyle properti digunakan untuk merender sel.

Untuk informasi selengkapnya tentang pemformatan kustom menggunakan peristiwa, CellFormatting lihat Cara: Mengkustomisasi Pemformatan Data di kontrol Formulir Windows DataGridView.

Untuk menghindari penalti performa saat menangani peristiwa ini, akses sel melalui parameter penanganan aktivitas daripada mengakses sel secara langsung.

Untuk mengkustomisasi konversi nilai yang diformat dan ditentukan pengguna menjadi nilai sel aktual, tangani CellParsing peristiwa tersebut.

Untuk informasi selengkapnya tentang cara menangani peristiwa, lihat Menangani dan Menaikkan Peristiwa.

Berlaku untuk

Lihat juga