Menu Horisontal

Sabtu, 28 April 2012

Highlighting Record in Winform DataGridView



Kontrol Winform DataGridView mempunyai sebuah event yang dapat kita gunakan salah satunya untuk memberikan warna tertentu properti back color dan fore color dengan kriteria record yang kita inginkan. Misalkan kita ingin memberi warna yang berbeda untuk record dimana data produk yang dimiliki memiliki nilai stok sama dengan 0 (nol). Event yang dapat digunakan yaitu CellFormatting. Dengan memanfaatkan event tersebut kita dapat merubah style cell yang berbeda dengan nilai defaultnya, bahkan kita juga bisa menambahkan atau merubah teks ke cell tertentu.
Pada artikel kali ini saya akan membuat contoh aplikasi sederhana yang akan mengecek UnitsInStock table Products di database Northwind. Jika nilai stok nya 0 (nol) maka cell atau row tersebut akan diberi warna merah dengan teks nya berwarna kuning.
Dengan menggunakan DataGridViewCellFormattingEventArgs yang kita dapat menentukan kolom tertentu yang akan diberi warna back color atau teks color yang berbeda. Selain itu dari parameter tersebut dapat kita dapatkan value dari cell yang sedang aktif. Sehingga dari sini lah kita terapkan kriteria formatting cell yang diinginkan.


Pada contoh code ini saya menggunakan Data Access Layer (ADONetHelper) yang saya buat sendiri untuk memudahkan pembuatan code saja :). Anda tinggal ganti saja dengan code yang sesuai (You know what i mean eh... :) ). Ok...let us see the code :

   1:  Option Strict On
   2:   
   3:  Imports ADONetHelper
   4:  Imports System.Data.SqlClient
   5:   
   6:  Public Class frmHighlightGrid
   7:   
   8:      Private strConn As String = My.Settings.connString
   9:      Private sqlConn As New SqlConnection(strConn)
  10:      Private rowToPaint As DataGridViewRow
  11:   
  12:      Private Sub LoadData()
  13:          Dim dtProd As DataTable = _
  14:          ADONetHelper.DataTableObject.GetDataTableFromDataReader( _
  15:          "Select * From Products", CommandType.Text, sqlConn, _
  16:          "products")
  17:   
  18:          DataGridView1.DataSource = dtProd
  19:   
  20:          DataGridView1.SelectionMode = _
  21:          DataGridViewSelectionMode.FullRowSelect
  22:   
  23:          DataGridView1.RowsDefaultCellStyle.SelectionBackColor = _
  24:          Color.Aqua
  25:   
  26:          DataGridView1.RowsDefaultCellStyle.SelectionForeColor = _
  27:          Color.Black
  28:   
  29:          DataGridView1.RowHeadersDefaultCellStyle.SelectionBackColor = _
  30:          Color.Aqua
  31:          DataGridView1.RowHeadersDefaultCellStyle.SelectionForeColor = _
  32:          Color.Red
  33:   
  34:      End Sub
  35:   
  36:      Private Sub Button1_Click(ByVal sender As System.Object, _
  37:      ByVal e As System.EventArgs) Handles Button1.Click
  38:          Me.LoadData()
  39:      End Sub
  40:   
  41:      Private Sub DataGridView1_CellFormatting(ByVal sender As Object, _
  42:      ByVal e As _
  43:      System.Windows.Forms.DataGridViewCellFormattingEventArgs) _
  44:      Handles DataGridView1.CellFormatting
  45:          If e.ColumnIndex = 6 Then '//UnitsInStock column
  46:   
  47:              rowToPaint = Me.DataGridView1.Rows(e.RowIndex)
  48:   
  49:              If Not rowToPaint.IsNewRow AndAlso _
  50:              CInt(e.Value) = 0 Then '//jika stok = 0 dan bukan row baru
  51:                  e.Value = e.Value.ToString & " - Need to Order"
  52:   
  53:                  rowToPaint.DefaultCellStyle.BackColor = _
  54:                  Color.Red
  55:   
  56:                  rowToPaint.DefaultCellStyle.ForeColor = _
  57:                  Color.Yellow
  58:              End If
  59:          End If
  60:      End Sub
  61:   
  62:  End Class

The result in action :

Tidak ada komentar: