Grouping Data In DataGridView

Created at : Apr/03/2007   [Click this link to download code sample]
2530 Views   4 Comments

Untuk melakukan pengelompokkan data berdasarkan kategori tertentu dalam sebuah datagridview diperlukan beberapa langkah. Langkah-langkahnya bisa kita lakukan sbb :

  1. Lakukan pengelompokkan data pada tabel / view dengan menggunakan "grouping" keyword dan "rollup" keyword pada SQL statement untuk membuat summary data.
  2. Tampilkan data tersebut via datasource control di datagridview, gunakan beberapa kolom yang akan ditampilkan saja.
  3. Tambahkan event handler untuk event "RowDataBound". Code yang kita ketikkan di event handler ini agak "tricky", karena memang disinilah kita manipulasi tampilan datagridview sesuai dengan keinginan / kebutuhan kita. Disini kita harus mengecek value dari kolom tertentu untuk manipulasi column span, back color cell, fore color heading, dsb. Karena hasil dari RollUp itu merupakan kombinasi dari beberapa kolom, jadi data nya masih mentah untuk kita customize.

Sekarang saya akan berikan contohnya secara step by step. Skenarionya : Saya punya beberapa tabel yang berhubungan dengan data Dokter. Dimana tiap-tiap dokter mempunyai spesialisasinya tersendiri. Ok...langsung saja, anda bisa buat tabel dengan relasi seperti ini :

kemudian buat view nya (named it vDoctors) :

buat stored procedure untuk membuat summary data :

design gridview seperti ini dengan hanya mengambil dua BoundField column, yaitu : "Doctor Name" dan "Spesialis" :

run the application :

hasilnya masih mentah. Tambahkan code ini di event handler "RowDataBound" (tricky code step-1) :

   1:  If e.Row.RowType = DataControlRowType.DataRow Then
   2:   
   3:      If e.Row.DataItem("Spesialis").ToString = "" And _
   4:          e.Row.DataItem("Doctor Name").ToString = "" Then
   5:              e.Row.Cells.RemoveAt(0)
   6:              e.Row.Cells.RemoveAt(0)
   7:       End If

code ini digunakan untuk menghilangkan data yang mengandung record kosong untuk kolom Spesialis dan kolom Doctor Name, hasilnya :

di step selanjutnya kita akan manipulasi cell untuk membuat header columnnya. Dari hasil di atas dapat dilihat terdapat beberapa record yang Doctor Name nya kosong, nah cell ini yang akan kita jadikan kandidat untuk membuat header columnnya. Tricky code step-2 (manipulasi code di atas) :

   1:  If e.Row.RowType = DataControlRowType.DataRow Then
   2:   
   3:      If e.Row.DataItem("Spesialis").ToString = "" And _
   4:          e.Row.DataItem("Doctor Name").ToString = "" Then
   5:              e.Row.Cells.RemoveAt(0)
   6:              e.Row.Cells.RemoveAt(0)
   7:      End If
   8:   
   9:      If e.Row.DataItem("Doctor Name").ToString = "" Then
  10:              e.Row.BackColor = Drawing.Color.Aqua
  11:              e.Row.Font.Bold = True
  12:              e.Row.ForeColor = Drawing.Color.Red
  13:      End If

hasilnya :

masih ada yang kurang? ya...sekarang kita akan menghilangkan data dokter yang mempunyai value di kolom spesialis, the last tricky code step :

   1:  If e.Row.RowType = DataControlRowType.DataRow Then
   2:   
   3:      If e.Row.DataItem("Spesialis").ToString = "" And _
   4:          e.Row.DataItem("Doctor Name").ToString = "" Then
   5:              e.Row.Cells.RemoveAt(0)
   6:              e.Row.Cells.RemoveAt(0)
   7:      End If
   8:   
   9:      If e.Row.DataItem("Doctor Name").ToString = "" Then
  10:              e.Row.BackColor = Drawing.Color.Aqua
  11:                e.Row.Font.Bold = True
  12:                e.Row.ForeColor = Drawing.Color.Red
  13:      End If
  14:   
  15:      If e.Row.DataItem("Spesialis").ToString <> "" And _
  16:          e.Row.DataItem("Doctor Name").ToString <> "" Then
  17:                e.Row.Cells.RemoveAt(0)
  18:                e.Row.Cells(0).ColumnSpan = 2
  19:                e.Row.Cells(0).HorizontalAlign = HorizontalAlign.Right
  20:      End If
  21:   
  22:  End If

 hasilnya :

Inilah hasil akhir setelah di finishing touch :)...btw ada yang familiar sama list dokter di atas :) klo anda berdomisili di Bandung, dan sering ke dokter anak, dokter kandungan, dokter internist setidaknya pasti anda tau :))


[Comments]
Elang Nov/01/2007 02:30:38 :
Bagus deh, saya mau coba praktekkan
Nicko Nov/17/2009 12:25:57 :
Salam sebelumnya untuk kk Rully.. Saya benar2 belajar banyak dari sini.. tapi ada beberapa yang saya ingin tanyakan... Apakah bisa kita membuat Judul Spesialis (yg warnannya biru) tanpa menggunakan Stored Procedure..?? Thx kk.. ^^
Nicko Nov/17/2009 01:38:35 :
Salam sebelumnya untuk kk Rully.. Saya benar2 belajar banyak dari sini.. tapi ada beberapa yang saya ingin tanyakan... Apakah bisa kita membuat Judul Spesialis (yg warnannya biru) tanpa menggunakan Stored Procedure..?? Thx kk.. ^^
Rully Nov/17/2009 04:40:45 :
@Nicko > Bisa saja mas kalau mau menggunakan tanpa stored procedure, jadi perintah yang terdapat di dalam stored procedure tersebut langsung di ketikkan di bahasa pemrogrammannya atau istilahnya menggunakan ad-hoc query.

[Write your comment]
Name (required)
URL (optional)
Example : http://www.yulianmf.com  
Comment

bycx
Input code above below (Case Sensitif) :
About Me 
Rully Yulian MF
My Name is Rully Yulian Muhammad Firmansyah. I am an IT Trainer, IT Consultant and Application Developer spesializing in Microsoft .NET technology and SQL Server database. I live in Bandung, Indonesia. My hobby is to play Guitar. [Read More...]
Top Download 
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 2235 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 2192 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 1523 times  
DataGridView Grouping : Downloaded 1243 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 1232 times  
Article Category 
Links 
Award 
Certifications 
MOS 2007
MCAS
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise - IT Training 
Native Enterprise Facebook Group 
My Facebook 
My LinkedIn 
Syndication (RSS 2.0) 
Powered By 
Native Enterprise News