Halaman

WARNING!!
Please do not post links crack / patch in your comment

Thursday, October 13, 2011

Unbound GridControl

Sebelum ini, bagi anda yang belum tahu kenapa saya menggunakan Unbound ini bisa ke Populate Data to GridControl, sehingga apa yang saya sajikan bisa terstruktur, sehingga tidak ada kesan loncat kepermasalahan yang lain.

Pada bahasan ini kita akan menampilkan data yang tidak terikat dengan data dari hasil query, pada contoh di Populate Data to GridControl, kita mempunya genderid 0 (nol) dan 1 (satu).
Jadi jika 0 (nol) adalah Laki dan 1 (satu) adalah Perempuan
untuk menyelesaikan kasus ini, sebenarnya kita mempunya beberapa pilihan :
  1. Dari Query yaitu dengan menggunakan Case When... Then Else End
  2. Setting diProgram /GridControl

1. Query
Tabel di database :
saya hanya memiliki 3 column name/fieldname yaitu no_urut, nama dan genderid
Baiklah buatlah tambahan tampilan seperti berikut :


pastikan column GridColumn4/Gender Desc untuk FieldName = gen_desc

scripts sebagai berikut :
Imports DevExpress.XtraEditors
Imports DevExpress.UserSkins.BonusSkins
Imports DevExpress.UserSkins.OfficeSkins
Imports System.Data
Imports System.Data.SqlClient
Imports DevExpress.XtraGrid.Views.Grid

Inherits DevExpress.XtraEditors.XtraForm
    Private connStr As String = "data source=sony-vaio;database=sample;integrated security=true"
    Dim dtTable As DataTable
    Private Sub GridControlSample_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            DevExpress.Skins.SkinManager.Default.RegisterAssembly(GetType(DevExpress.UserSkins.BonusSkins).Assembly)
            DevExpress.Skins.SkinManager.Default.RegisterAssembly(GetType(DevExpress.UserSkins.OfficeSkins).Assembly)
            DevExpress.Skins.SkinManager.EnableMdiFormSkins()
            DevExpress.Skins.SkinManager.EnableFormSkins()
            DevExpress.Skins.SkinManager.EnableFormSkinsIfNotVista()
            DevExpress.LookAndFeel.LookAndFeelHelper.ForceDefaultLookAndFeelChanged()
        Catch ex As Exception
            Exit Sub
        End Try
    End Sub

Sub ConnectionDB()
        Dim conn As New SqlConnection(connStr)
        Try
            conn.Open()
            Dim cmd As New SqlCommand("select *,(Case When (genderid =0) Then 'Laki' Else 'Perempuan' End) AS gen_desc from gender", conn)
            Dim ada As New SqlDataAdapter(cmd)
            dtTable = New DataTable
            ada.Fill(dtTable)
        Catch ex As Exception
            XtraMessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        Finally
            conn.Close()
        End Try
    End Sub
 Jalankan program atau tekan tombol F5 kemudian tekan tombol Retrieve maka hasilnya akan seperti ini :



kita sudah mendapatkan hasil untuk cara pertama, mungkin cara pertama jika datanya tidak banyak dan link hanya sedikit tidak terlalu memberatkan Server, tapi bagaimana jika dari sisi program yang menangani hal tersebut, mungkin agak sedikit meringankan beban server.


2. Unbound GridControl
Karena ada permintaan dari sahabat, agar tampilan Unbound berbentuk Combobox, sekarang kita akan melakukan perubahan pada bagian GridControl, terutama pada bagian kolom Gender Desc.



kiranya seperti itu, jadi di dalam kolom grid ada yang berbentuk comboxbox (semoga seperti ini ...hehehehe)... dan isinya sudah ada yaitu index(0) Laki dan Index(1) Perempuan.
Cara membuat kolom tersebut sebagai berikut : masuk ke dalam Run Designer, kemudian pilih Columns--> gridcolumn4(Gender Desc)



Dalam FieldName di gridcolumn4 saya beri nama gen_desc, penamaan bisa apa saja, Fieldname ini tidak ada/terikat dengan table di database(berdiri sendiri, ini yg kita sebut unbound)

Pada Properties ColumnEdit-->New --> ComboBoxEdit , nanti akan terbentuk secara otomatis namanya menjadi RepositoryItemComboBox1, seperti pada gambar di atas, klik tanda + pada ColumnEdit, kemudian cari Items -->(Collection), isikan seperti berikut :



Jika telah selesai tekan tombol OK.

Setting selanjutnya yang sangat penting yaitu UnboundType, pastikan unboundtype anda telah di sesuaikan, karena saya bertipe String, maka UnboundType=String.


Kalau dalam tabel perubahan GridColumn4 Properties seperti ini :
<>
No
Properties
Value
1 Name gridcolumn4
2 Caption Gender Desc
3 FieldName gen_desc
4 ColumnEdit
A. New--> ComboBoxEdit RepositoryItemComboBox1
B. Items 
   B.1. Add Index(0) Laki
   B.2. Add Index(1) Perempuan
5 UnboundType String

kita sudah setting persiapan untuk column Gender Desc, selanjutnya kita akan kembalikan posisi scripts pada prosedure ConnectionDB ke posisi semula
Sub ConnectionDB()
        Dim conn As New SqlConnection(connStr)
        Try
            conn.Open()
            Dim cmd As New SqlCommand("select * from gender", conn)
            Dim ada As New SqlDataAdapter(cmd)
            dtTable = New DataTable
            ada.Fill(dtTable)
        Catch ex As Exception
            XtraMessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Exit Sub
        Finally
            conn.Close()
        End Try
    End Sub
setelah itu, masih di dalam View Code tambahkan Scripts berikut pada CustomUnboundColumnData milik dari GridView1.
Private Sub GridView1_CustomUnboundColumnData(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs) Handles GridView1.CustomUnboundColumnData
        Try
            If e.IsGetData AndAlso e.Column.FieldName = "gen_desc" Then
                Dim view As GridView = TryCast(sender, GridView)
                Dim gen As Double = CDec(Fix((TryCast(view.DataSource, DataView))(e.ListSourceRowIndex)("genderid")))
                Dim ttlVal As Object
                ttlVal = gen
                If ttlVal = 0 Then
                    e.Value = RepositoryItemComboBox1.Items.Item(0) 'nilai index
                ElseIf ttlVal = 1 Then
                    e.Value = RepositoryItemComboBox1.Items.Item(1) 'nilai index
                End If
            End If
        Catch ex As Exception
            Exit Sub
        End Try
    End Sub

sekarang sudah semua, saatnya untuk jalankan program, tekan tombol F5, kemudian tekan tombol Retrieve maka tampilannya akan seperti ini.


kalau hanya tampil seperti itu, masih kurang menarik, bagaimana kalau combobox tersebut di berikan image juga, jadi seperti ini :


caranya adalah
  • Tambahkan ImageList (bawaan Visual Studio) ke dalam form
  • Isi ImageList1 dengan gambar yang ada inginkan
  • Klik GridView1, pada properties-nya isikan Image dengan ImageList1
  • Masuk ke Run Designer -->Columns--> ColumnEdit--> New --> ImageComboboxEdit, nanti akan terbentuk dengan otomatis namanya menjadi RepositoryItemImageComboBox1
  • Klik tanda + pada ColumnEdit-->LargeImage-->ImageList1
  • Selanjutnya pada ColumnEdit-->Items, isikan seperti berikut


Klik Add 2 kali dan isikan, sehingga akan terbentuk 2 index.
Index(0) :
Description = Laki
ImageIndex = 1 (tergantung urutan pada ImageList1)
Value = Pria

Index(1) :
Description = Perempuan
ImageIndex = 0 (tergantung urutan pada ImageList1)
Value = Perempuan

Tabel Perubahan pada GridColumn4 :
<>
  
<>
No
Properties
Value
1 Name gridcolumn4
2 Caption Gender Desc
3 FieldName gen_desc
4 ColumnEdit
A. New--> ImageComboBoxEdit RepositoryItemImageComboBox1
B. LargeImages ImageList1
C. Items 
   C.1. Add Index(0)
           Description Laki
           ImageIndex 1
           Value Laki
   C.2. Add Index(1)
           Description Perempuan
           ImageIndex 0
           Value Perempuan
5 UnboundType String

sekarang merubah scripts untuk CustomUnboundColumnData pada GridView1 menjadi seperti ini

Private Sub GridView1_CustomUnboundColumnData(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs) Handles GridView1.CustomUnboundColumnData
        Try
            If e.IsGetData AndAlso e.Column.FieldName = "gen_desc" Then 'dari gridcolumn4
                Dim view As GridView = TryCast(sender, GridView)
                Dim gen As Double = CDec(Fix((TryCast(view.DataSource, DataView))(e.ListSourceRowIndex)("genderid"))) 'diambil dari gridcolumn3
                Dim ttlVal As Object
                ttlVal = gen
                If ttlVal = 0 Then
                    e.Value = RepositoryItemImageComboBox1.Items.Item(0).Value
                ElseIf ttlVal = 1 Then
                    e.Value = RepositoryItemImageComboBox1.Items.Item(1).Value
                End If
            End If
        Catch ex As Exception
            Exit Sub
        End Try
    End Sub
jika sudah selesai jalankan program dengan menekan tombol F5, kemudian tekan tombol Retrieve



sekarang sudah jelas siapa laki dan perempuan, semoga bermanfaat buat anda....


Salam

Download source code:

15 comments:

  1. sip master...
    ini yang dibutuhkan....

    ReplyDelete
  2. thq nih mas sofyan, jarang ada blog untuk bahas devexpress (apalagi indo), satu lagi mas sofyan bisa tutorial XtraReportnya... thq sebelumnya

    ReplyDelete
  3. makasih mas made,... sudah mampir ke blog saya
    XtraReport juga akan saya bahas nantinya

    ReplyDelete
  4. Siippp ini gan yg dicarii... :D
    tpi ane msih kurang faham maksud coding nih gan??
    Private Sub GridView1_CustomUnboundColumnData(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs) Handles GridView1.CustomUnboundColumnData
    Try
    If e.IsGetData AndAlso e.Column.FieldName = "gen_desc" Then
    Dim view As GridView = TryCast(sender, GridView)
    Dim gen As Double = CDec(Fix((TryCast(view.DataSource, DataView))(e.ListSourceRowIndex)("genderid")))

    "gen_desc" dan "genderid" di ambil dari mna gann??
    kan query'y ini "select * from gender", conn) yg ada cm noId,nama,genderId..

    mkasih gan sbelumnya

    ReplyDelete
  5. php.ccnk.. makasih sudah mampir
    untuk gen_desc diambil dari nama FieldName di gridcolumn4 (column inilah yang unbound)
    genderid di ambil dari gridcolumn3 FieldNamenya ya pasti genderid
    hati-hati ya FieldName dan Name pada gridcontrol/gridview beda ya..

    ReplyDelete
  6. iya gan sudah dimengertii "select * from gender" tanda *(all) sendiri ada tabel apa sjakah gan?? noId,nama,genderId atau plus gen_desc juga lha gen_desc 'y ditampilkan ke sourcecode'y juga??
    ane coba gagal :'( malah jadi perempuan semua.. nih ksalahan pada tuh parameter namefield'y gan..

    ReplyDelete
  7. Owww.. ternyata harus ada gen_desc "String" dalam dataSource'y.. dah gann.. bisa..

    "select * from gender" sbelumnya sya asumsikan cma 3 tabel,, trus di even Handles GridView1.CustomUnboundColumnData baru di ambil value 0 dan 1 tadi sebagai parameter untuk mnentukan index di Repository'ny tdii..

    makasih gann...
    ane baru blajar gridview gan,, ribet jg gann..
    tidak smudah menggunakan listview..

    sya request boleh g gan buat koleksi di blog agan..

    ReplyDelete
  8. php.ccnk...
    senang bisa bantu ....
    reguest apa gan ? dengan senang hati gan..

    ReplyDelete
  9. tanya dikit gann,, klo di listview kan ane byasa make ContextMenuStrip, ktika ingin update/delete pada list id tersebut.. klo make GridView nih gmna yah gan?? dah menyerah ane ngutik2.. :(

    stu lgi gan,, gmna carany ngambil satu value dalam column gan.. ktika kita double klik dmna saja columnya selama msih dalam 1 row/data (critanya mau ngambil PK'y di row tersebut).. slama ni sya baru tau ngambil nilai di field/colum yg di klik..

    mav gan klo agan blum jelass,, :) intinya gtu gan...
    pemanfaatan devExpress gan.. :D makasih gann

    ReplyDelete
  10. php.ccnk..
    coba ke link yang ini gan Get Row Data...
    mungkin itu yang agan maksud, bisa Row/Cell, nanti kalo belom jelas comment aja di sana, dengan senang hati saya jelaskan

    ReplyDelete
  11. mas saya mau tanya nih

    saya buat form master detail, saya menggunakan component devexpress untuk grid view

    table jurnal : jurnal_no, kode_bukti, tgl_jurnal, keterangan
    table jurnal_detail : jurnal_no, no_urut, kode_rekening, debet, kredit, keterangan

    table jurnal sebagai master dan jurnal_detail sebagai detail, ane buat form master detail

    waktu user entri, saya asumsikan user belum melakukan save data ke database waktu entri master (table jurnal) n langsung entri detail (digrid view) nah bagaimana caranya jurnal_no (parent key) tersebut bisa otomatis ke insert di column jurnal_no (ditable jurnal_detail)

    saya udah coba pake event :

    Private Sub GridView1_InitNewRow(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs) Handles GridView1.InitNewRow

    GridView1.SetRowCellValue(GridView1.FocusedRowHandle, GridView1.Columns("jurnal_no"), jurnalNoTextEdit.text)

    GridView1.SetRowCellValue(GridView1.FocusedRowHandle, GridView1.Columns("debet"), 0)
    GridView1.SetRowCellValue(GridView1.FocusedRowHandle, GridView1.Columns("kredit"), 0)
    End Sub

    tetapi nilai jurnal_no tidak muncul yg berakibat akan menghasilkan error, tetapi pada kolom debet/kredit muncul nilai 0

    mohon pencerahannya

    ReplyDelete
    Replies
    1. Mas Lotus, sorry baru bale, baru pulang dari dinas....

      untuk masternya juga pakai Grid ? atau di simpan di textbox/textedit untuk jurnal_no ?

      Delete
    2. untuk masternya saya buat menggukan form biasa (pake textbox), karena terlihat user friendly, mohon pencerahannya

      ada ym nya mas biar bisa ngobrol lebih enak

      Delete
    3. kenapa tidak di masukkan pada saat save saja, jadi jurnal_no tidak perlu di masukkan di dalam grid..
      jadi pada saat looping untuk memasukkan detailnya pakai parameter saja untuk mengambil jurnal_no...

      Delete
  12. mas mw nanya nie..
    q dah coba tampilin data di datagridnya dev n datanya g terlihat.
    barisnya bertambah sesuai jumlah data di database mysql q tapi tulisannya g keliatan, ada solusi mas?

    ReplyDelete

Note: Only a member of this blog may post a comment.

Search This Blog