Jumat, 18 Oktober 2013

Menambahkan row dan menghapus multiple row pada Unbound DataGridView di VB.Net 2005

Suatu ketika saya membaca blog seorang aktivis blog yang telah lama berkecimpung dalam dunia ini, yang saya pahami dari tulisannya adalah sebuah keperihatinan beliau, bahwa perkembangan sosial media ternyata melemahkan semangat orang untuk menulis di Blog, padahal menurutnya sosial media tidak seefektif Blog untuk menyampaikan dan berbagi ilmu pengetahuan, apalagi semacam twiter yang membatasi postingan hanya beberapa puluh kata saja. 

Ada satu hal dari tulisannya yang memberikan semangat kepada saya untuk menulis di Blog, yaitu sebuah pesan darinya yang berbunyi tulislah apa saja yang hendak kamu tulis(tentu saja hal-hal yang positif) jangan berpikir "ah.. paling juga sudah ada yang menulis tentang tema yang hendak aku tulis ini" atau "Siapa juga yang akan membaca tulisanku ini" atau "Ah.. tema yang akan aku tulis ini kan remeh dan sangat sederhana, siapa yang membutuhkan tulisan seperti ini", sang Bloger bilang "Buang jauh-jauh pikiran seperti itu, karena bisa jadi tema yang mungkin anda anggap sepele dan remeh temeh, bagi orang lain, itu adalah sesuatu yang rumit dan komplek dan yakinlah suatu saat nanti ada orang yang akan sampai ke Blog anda dan membaca tulisan anda". 

Dan hal itu sudah saya buktikan, walaupun hanya hitungan beberapa gelintir saja rata-rata per harinya, namun ternyata ada juga yang mampir ke Blog ini, mungkin hanya sekedar lewat, mungkin juga ia menemukan solusi dari apa yang saya tulis di sini wal Hamdulillah telah bisa membantu orang lain. Mungkin juga manfaatnya tidak kita rasakan secara langsung akan tetapi siapa tahu sesuatu yang kita tulis itu telah menyelamatkannya dari hal kritis dalam hidupnya, bukankah Allah tidak akan menyia-nyiakan amalan seseorang walau ia hanya seberat atom. Semoga setiap solusi yang dapat kita berikan kepada orang lain akan menjadi penolong bagi kita dengan diangkatnya kesulitan-kesulitan yang sedang kita hadapi atau yang akan kita hadapi kelak. Jadi tetaplah semangat untuk menulis dan berbagi.

Yup.. sekarang setelah ber-busa-busa sebentar :) saya lanjutkan tulisan ini ke pokok pembahasan yang hendak saya tulis, sesuai dengan judulnya, Bismillah...

Jika kita membuat program aplikasi yang berkaitan dengan pengolahan database hampir bisa dipastikan kita akan menggunakan salah satu komponen yang sangat penting yaitu DataGridView. Data yang akan ditampilkan pada DataGridView bisa langsung di kaitkan ke sebuah datasource (istilahnya Bound) atau bisa juga data yang ditampilkan tersebut bukan data yang berasal dari sebuah datasource(istilahnya unBound), pada tulisan ini saya akan membahas bagaimana memanfaatkan DataGridView * Mulai dari setting kolom, menambahkan row dan menghapus lebih dari satu row * untuk data yang unBound.

Pertama
Buatlah sebuah project baru untuk WindowsApplication, pada Form1 tambahkan :
  1. DataGridView1, Sett property Width : 799 dan Height : 315
  2. 2 Buah Button, button1 ubah Text di property menjadi Remove dan button2 menjadi Add Row
  3. Set Form Width : 839 & Height : 433
Atur posisinya sesuai selera anda.


Kedua
Kopikan kode program berikut ini ke masing-masing tempatnya.
Kode program berikut ini adalah untuk men-setting kolom yang kita kehendaki, yang terdiri dari 3 buah procedure, yaitu SettGridColTextSettGridColCehckBoxSettGridColCombo dan SettGridView, Penjelasanya adalah sebagai berikut,

SettGridColText,
Untuk men-sett kolom sebagai input cell dengan tipe inputan TextBox

Public Function SettGridColText(ByVal hdrText As String, _
                                    ByVal hdrName As String, _
                                    ByVal lbrCol As Integer, _
                                    ByVal TheReadO As Boolean, _
                                    ByVal AuMode As DataGridViewAutoSizeColumnMode, _
                                    Optional ByVal VisibleCol As Boolean = True, _
                                    Optional ByVal ContAllignment As DataGridViewContentAlignment = DataGridViewContentAlignment.BottomCenter) As DataGridViewTextBoxColumn

        Dim TheCol As New DataGridViewTextBoxColumn

        With TheCol
            .HeaderText = hdrText
            .Name = hdrName
            .Width = lbrCol
            .ReadOnly = TheReadO
            .AutoSizeMode = AuMode
            .Visible = VisibleCol
            .DefaultCellStyle.Alignment = ContAllignment 'Contain Alligment
        End With
        Return TheCol
    End Function

SettGridColCehckBox,
Untuk men-sett kolom sebagai input cell dengan tipe inputan CheckBox

Public Function SettGridColCehckBox(ByVal hdrText As String, _
                                        ByVal hdrName As String, _
                                        ByVal lbrCol As Integer, _
                                        ByVal TheReadO As Boolean, _
                                        ByVal AuMode As DataGridViewAutoSizeColumnMode, _
                                        Optional ByVal VisibleCol As Boolean = True, _
                                        Optional ByVal ContAllignment As DataGridViewContentAlignment = DataGridViewContentAlignment.BottomCenter) As DataGridViewCheckBoxColumn

        Dim TheCol As New DataGridViewCheckBoxColumn

        With TheCol
            .HeaderText = hdrText
            .Name = hdrName
            .Width = lbrCol
            .ReadOnly = TheReadO
            .AutoSizeMode = AuMode
            .Visible = VisibleCol
            .DefaultCellStyle.Alignment = ContAllignment 'Contain Alligment
        End With
        Return TheCol
    End Function


SettGridColCombo,
Untuk men-sett kolom sebagai input cell dengan tipe inputan ComboBox

Public Function SettGridColCombo(ByVal hdrText As String, _
                                     ByVal hdrName As String, _
                                     ByVal lbrCol As Integer, _
                                     ByVal TheReadO As Boolean, _
                                     ByVal AuMode As DataGridViewAutoSizeColumnMode) As DataGridViewComboBoxColumn

        Dim TheCol As New DataGridViewComboBoxColumn
        Dim value As DataGridViewContentAlignment

        value = DataGridViewContentAlignment.MiddleRight

        With TheCol
            .HeaderText = hdrText
            .Name = hdrName
            .Width = lbrCol
            .ReadOnly = TheReadO
            .AutoSizeMode = AuMode
        End With
        Return TheCol
    End Function

SettGridView,
Pada procedure ini kita akan memanfaatkan ketiga procedure di atas untuk men-setting masing-masing kolom sesuai dengan kebutuhan kita, apakah kolom tersebut untuk menerima inputan dalam bentuk TextBox, CheckBox atau kah ComboBox.

Private Sub SettGridView()
        'No
        Dim ColNo As New DataGridViewTextBoxColumn
        ColNo = SettGridColText("No", "hdrNo", 25, False, DataGridViewAutoSizeColumnMode.None, True, DataGridViewContentAlignment.MiddleCenter)
        'Item Code
        Dim ColIcode As New DataGridViewTextBoxColumn
        ColIcode = SettGridColText("Code", "hdrCode", 70, False, DataGridViewAutoSizeColumnMode.None, True, DataGridViewContentAlignment.MiddleLeft)
        'Item Part No
        Dim ColIPartNo As New DataGridViewTextBoxColumn
        ColIPartNo = SettGridColText("PartNo", "hdrPartNo", 150, False, DataGridViewAutoSizeColumnMode.None, True, DataGridViewContentAlignment.MiddleCenter)
        'Item Nameu
        Dim ColIName As New DataGridViewTextBoxColumn
        ColIName = SettGridColText("Name", "hdrName", 250, False, DataGridViewAutoSizeColumnMode.None, True, DataGridViewContentAlignment.MiddleLeft)
        'UoM
        Dim ColUoM As New DataGridViewTextBoxColumn
        ColUoM = SettGridColText("UoM", "hdrUoM", 40, False, DataGridViewAutoSizeColumnMode.None, True, DataGridViewContentAlignment.MiddleCenter)
        'Qty
        Dim ColQty As New DataGridViewTextBoxColumn
        ColQty = SettGridColText("Qty#", "hdrQty", 60, False, DataGridViewAutoSizeColumnMode.None, True, DataGridViewContentAlignment.MiddleRight)
        
        Dim isForStock As New DataGridViewCheckBoxColumn
        isForStock = SettGridColCehckBox("For Stock", "hdrForStock", 20, False, DataGridViewAutoSizeColumnMode.Fill, True, DataGridViewContentAlignment.MiddleCenter)

        With DataGridView1
            .Columns.Clear()
            .RowHeadersWidth = 20
            .AllowUserToAddRows = False
            .AllowUserToDeleteRows = False
            .Columns.Add(ColNo)
            .Columns.Add(ColIcode)
            .Columns.Add(ColIPartNo)
            .Columns.Add(ColIName)
            .Columns.Add(ColUoM)
            .Columns.Add(ColQty)
            .Columns.Add(isForStock)
        End With
    End Sub

Ke-tiga
Kopikan kode berikut ke event onClick button Add Row

 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        DataGridView1.Rows.Add()
 End Sub

Ke-Empat
Kopikan Kode Berikut Ke Event onClick button Remove Row

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim idx2Remove As Integer
        While (DataGridView1.SelectedRows.Count - 1) >= 0
            Dim myStrPesan As String
            idx2Remove = DataGridView1.SelectedRows(0).Index
            myStrPesan = "Are sure want to remove item from the list : " & _
                            DataGridView1.SelectedRows(0).Cells("hdrCode").Value & "-" & _
                            DataGridView1.SelectedRows(0).Cells("hdrName").Value
            If MessageBox.Show(myStrPesan, "Confirmation", MessageBoxButtons.YesNo, _
                    MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                DataGridView1.Rows.RemoveAt(idx2Remove)
            Else
                DataGridView1.SelectedRows(0).Selected = False
            End If
        End While
  End Sub

Ke-Lima
Kopikan kode berikut ke event Form onLoad

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        SettGridView()
End Sub

Ke-Enam
Tekan tombol F5 untuk melihat bagaimana hasilnya,

Tampilan saat program dijalankan

Click Tombol Add Row untuk menambahkan row, lalu kemudian anda bisa mencoba untuk melakukan input data seperti yang tampak pada tampilan di bawah ini
Anda bisa menghapus sebuah row atau lebih dalam waktu bersamaan, jika ingin melakukan penghapusan multiple row pada DataGridView maka pilih dulu row yang diinginkan dengan menggunakan kombinasi key tombol CTRL dan tombol mouse click Kiri, kemudian anda Click Button Remove, sebagaimana tampak pada gambar di bawah ini,


Kode program contoh secara lengkap bisa didownload di sini . Demikian semoga bermanfaat.

Tidak ada komentar: