Pengalamanku Dengan DataSet - bagian 2 (revisi 2)

Discussion Pengalamanku Dengan DataSet - bagian 2 (revisi 2)

  • 24 Februari 2012 21:18
     
     

    Membuat DataRow (Add New Row)

    Sebelum membuat DataRow, anda harus mengetahui bahwasannya DataRow adalah turunan langsung (dikenal dengan istilah MustInherits) dari DataTable. Itu sebabnya DataRow membutuhkan DataTable. Dan sekarang, inilah cara mendeklarasikan DataRow:

    Dim r As DataRow = .vTabel.NewRow

    Setelah anda selesai mendeklarasikan, maka marilah kita memasukkan nilainya kemasing-masing colomn yang dimiliki oleh DataRow, misalnya:

    r(0) = "Jhon"
    r(1) = "John"

    Atau bisa juga begini:

    r("Nama Depan") = "Jhon"
    r("Nama Belakang") = "John"

    Sebetulnya ada 6 macam penulisan. Dan saya hanya perlu menjelaskan 2 macam. Lagipula ini yang paling mudah untuk dipelajari. Setelah selesai mengisi masing-masing colomn yang dimiliki oleh DataRow, maka sekarang saatnya memasukan DataRow tersebut kedalam DataTable, begini caranya:

    vTabel.Rows.Add(r)

    Lihatlah, mudah bukan. Sebagai latihan kali ini, saya akan memasukkan 3 record baru, dengan menggunakan model penulisan yang pertama, seperti berikut ini:

    12 Dim r As DataRow = .vTabel.NewRow
    13 r(0) = "Jhon"
    14 r(1) = "John"
    15 .vTabel.Rows.Add(r)
    16
    17 r = .vTabel.NewRow
    18 r(0) = "Jhin"
    19 r(1) = "Jihn"
    20 .vTabel.Rows.Add(r)
    21
    22 r = .vTabel.NewRow
    23 r(0) = "Jhun"
    24 r(1) = "Juhn"
    25 .vTabel.Rows.Add(r)

    Kode diatas ini adalah lanjutan dari kode sebelumnya yang ada di Form1_Load. Setelah selesai mengetik kode diatas, langsung aja run, nanti hasilnya akan seperti ini:

    Form1.1

    Lihatlah, mudah bukan? Dari sini saya akan bertanya kepada anda. Apakah anda melihat syntax sql? Semisal Selectdan Insert? Sama sekali tidak. Berarti kesimpulannya gampang kan, hehehe. Contoh yang telah saya buat saat ini, adalah contoh DataTable yang tidak terikat dengan DataSet. Bila anda ingin memasukkan DataTable ini kedalam struktur DataSet, maka gunakan kode dibawah ini:

    1 Using ds As New DataSet
    2    ds.Tables.Add(.vTabel)
    3 End Using


    Menyimpan Kembali Ke File

    Nah, sekarang kita kembali ke pemikiran awal. Kita sudah pernah membuat file DataSet. Dan tentunya alangkah bijaknya DataTable yang telah kita buat ini bisa disimpan kedalam sebuah file. Agar dikemudian hari bisa kita load kembali tentunya. Maka lakukan saja langkahseperti berikut ini:

    1 Using ds As New DataSet
    2     ds.ReadXml(My.Computer.FileSystem.SpecialDirectories.Desktop
    & "\My 1st DataSet.txt")
    3    ds.Tables.Add(.vTabel)
    4     ds.WriteXml(My.Computer.FileSystem.SpecialDirectories.Desktop & "\My 1st DataSet.txt", XmlWriteMode.WriteSchema)
    5 End Using

    Pada baris kode ke 2, kita akan me-load file DataSet yang pernah kita buat. Setelah itu pada baris ke 3, kita masukkan DataTable yang telah kita buat kedalam struktur DataSet yang dimiliki oleh file My 1st DataSet.txt. Dan pada baris ke 4, apa yang telah terjadi pada DataSet, kita kedalam file My 1st DataSet.txt. setelah ini berhasil, cobalah anda buka kembali file My 1st DataSet.txt yang ada di desktop anda, pasti isinya akan seperti ini:

    1 <?xml version="1.0" standalone="yes"?>
    2 <My_x0020_1st_x0020_DataSet>
    3 <xs:schema id="My_x0020_1st_x0020_DataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">   
    4 <xs:element name="My_x0020_1st_x0020_DataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">     
    5 <xs:complexType>
    6 <xs:choice minOccurs="0" maxOccurs="unbounded">         
    7 <xs:element name="Table1">           
    8 <xs:complexType>             
    9 <xs:sequence>               
    10 <xs:element name="Nama_x0020_Depan" type="xs:string" minOccurs="0" />               
    11 <xs:element name="Nama_x0020_Belakang" type="xs:string" minOccurs="0" />             
    12 </xs:sequence>           
    13 </xs:complexType>         
    14 </xs:element>       
    15 </xs:choice>     
    16 </xs:complexType>   
    17 </xs:element> 
    18 </xs:schema> 
    19 <Table1>   
    20 <Nama_x0020_Depan>Jhon</Nama_x0020_Depan>   
    21 <Nama_x0020_Belakang>John</Nama_x0020_Belakang> 
    22 </Table1> 
    23 <Table1>   
    24 <Nama_x0020_Depan>Jhin</Nama_x0020_Depan>   
    25 <Nama_x0020_Belakang>Jihn</Nama_x0020_Belakang> 
    26 </Table1> 
    27 <Table1>   
    28 <Nama_x0020_Depan>Jhun</Nama_x0020_Depan>   
    29 <Nama_x0020_Belakang>Juhn</Nama_x0020_Belakang> 
    30 </Table1>
    31 </My_x0020_1st_x0020_DataSet>

    Lihatlah, inilah hasil manipulasinya. Yang perlu diperhatikan adalah kita tidak memberikan nama pada DataTable. Sehingga DataSet secara otomatis akan memberi nama dengan urutan. Sebagai contoh disini kita mendapatkan nama DataTable-nya adalah Table1.

    Mengenal DataTable Lebih Lanjut

    DataTable adalah pusat data yang dimiliki oleh ADO .Net Library. Yang terunik dari DataTable adalah DataTable bersifat stand alone, dimana DataTable bisa berdiri sendiri. Ingat, contoh sudah saya berikan. Dimana DataTable bisa kita gunakan secara in-memory. Pada ADO .Net Library, objek yang bisa terhubung kedalam DataTable adalah DataSet dan DataView.

    Pada contoh yang pernah saya berikan, ketika kita mencoba menyimpan DataTable kedalam file. Maka kita membutuhkan
    DataSet. Pertanyaannya adalah kenapa? Jawabannya adalah dikarenakan DataSet berperan sebagai workspace. Anda merasa tidak asing dengan istilah workspace? Itu hanya akan terjadi bila anda pernah menjadi programmer pada Microsoft Access.

    Kalau begitu bagaimana dengan DataView? Bagi saya secara pribadi, DataView adalah table cadangan yang dimiliki oleh DataTable. Memang DataView bukanlah turunan (inherits) dari DataTable. Tetapi, DataView hanya bisa digunakan bila ada DataTable. Uniknya, banyak programmer yang tidak menyadari, bahwasannya DataView sebetulnya sudah termasuk kedalam
    struktur DataTable, yaitu ada pada property DefaultView. Kenapa tiba-tiba saya menyinggung hal ini? Dikarenakan DataTable ternyata memiliki 2 output, walaupun ini hanyalah pandangan pribadi saya saja.

    Output pertama adalah record yang telah tersimpan di DataTable bersifat original. Dalam artian urutan record akan ditampilkan sesuai dengan kapan record tersebut dimasukkan. Sedangkan output yang kedua adalah, bila anda ingin mengubah susunan record, maka DefaultView-lah yang akan melakukannya, bukan DataTable.

    Sekarang, saya akan menggunakan kode yang sudah pernah saya ketik. Perbedaannya ada beberapa hal yang saya modifikasi. Walau begitu saya akan memperlihatkannya secara lengkap, berikut ini kodenya:

    1 Public Class Form1
    2     DimvDBGView AsNewDataGridView
    3     DimvTabel AsNewDataTable
    4     PrivateSub Form1_Load(ByValsender AsSystem.Object, ByVale AsSystem.EventArgs) Handles MyBase.Load
    5         WithMe
    6             Try
    7                .Controls.Add(.vDBGView)
    8                .vDBGView.Dock = DockStyle.Fill
    9
    10                .vTabel.Columns.Add("Nama Depan", GetType(String))
    11                .vTabel.Columns.Add("Nama Belakang", GetType(String))
    12
    13                 Dimr AsDataRow = .vTabel.NewRow
    14                 r(0) = "Jhon"
    15                 r(1) = "John"
    16                .vTabel.Rows.Add(r)
    17
    18                 r = .vTabel.NewRow
    19                 r(0) = "Jhin"
    20                 r(1) = "Jihn"
    21                 .vTabel.Rows.Add(r)
    22
    23                 r = .vTabel.NewRow
    24                 r(0) = "Jhun"
    25                 r(1) = "Juhn"
    26                 .vTabel.Rows.Add(r)
    27
    28                 .vTabel.DefaultView.Sort = "[nama depan]"
    29
    30                 .vDBGView.DataSource = .vTabel
    31
    32                  Fora AsInteger= 0 To .vTabel.Rows.Count – 1
    33                     Debug.WriteLine(.vTabel.Rows(a)(0) & ","& .vTabel.Rows(a)(1))
    34                  Next
    35              Catch ex As Exception
    36              EndTry
    37         End With
    38     End Sub
    39 End Class

    Seperti biasa, kode diatas ini diasumsikan anda memiliki file Form1.vb. Setelah anda selesai mengetikkan semuanya, langsung
    saja anda run. Nantinya hasilnya akan seperti ini:

    Form 3

    Pada gambar diatas, saya mencoba mendekatkan form1 ke jendela debug yang saya miliki. Dan lihatlah apa yang terjadi. Ternyata hasilnya berbeda? Bagaimana bisa? Ingat, pada baris ke 30, saya mem-binding-kan DataSource yang dimiliki DataGridView ke DataTable. Dan bahkan pada baris 32 hingga 34, saya me-looping DataRow yang ada dengan menggunakan DataTable, bukankah begitu? Tapi, mengapa hasil yang muncul malah berbeda? Sampai disini berarti asumsi saya benar, yaitu DataTable memiliki 2 output. Antara yang original yang disimpan oleh DataTable. Dan yang transaksi yang disimpan oleh DataView.

    Sampai disini, pandangan pribadi saya mengatakan, menggunakan DataTable berarti juga menggunakan DataView secara langsung. Beruntung sekali dengan hikmah yang saya dapati ini. Dan sekarang bila ada pertanyaan, maka pertanyaan yang mungkin bisa saya duga adalah, bagaimana cara membaca DataRow yang telah dimanipulasi oleh DataView? Gampang, pada struktur DataView, ada function yang bernama ToTable. Gunakan saja function tersebut. Jadi, pada baris 33, kode dibawah ini:

    .vTabel.Rows(a)(0)

    dirubah menjadi:

    .vTabel.DefaultView.ToTable.Rows(a)(0)

    Dengan begitu, DataRow yang akan digunakan adalah DataRow hasil manipulasi DataView.

    Mengsortir DataRow

    Untuk bisa mengsortir DataRow, itu cukuplah mudah. Anda hanya perlu menuliskan nama DataColomn, semisal:

    vTabel.DefaultView.Sort = "ID"

    Bilamana nama DataColomn yang anda miliki menggunakan spasi, semisal Nama Depan, maka penulisannya seperti ini:

    vTabel.DefaultView.Sort = "[Nama Depan]"

    Betul sekali, segala sesuatu yang memiliki spasi, maka harus diberi tanda kurung buka dan kurung tutup. Normalnya, bila anda tidak memberikan syntax tambahan apapun, maka DataRow akan disortir secara ascending. Bilamana anda ingin DataRow disortir secara descending, berilah syntax tambahan desc, semisal:

    vTabel.DefaultView.Sort = "[Nama Depan] desc"

    Dan bilamana anda ingin mengsortir lebih dari 1 DataColomn, anda hanya perlu menambahkan koma saja dimasing-masing penulisan DataColomn, semisal:

    vTabel.DefaultView.Sort = "[Nama Depan], ID"

    Dan untuk mematikan sortir, cukup mudah, anda hanya perlu menuliskan empty string saja, semisal:

    vTabel.DefaultView.Sort = ""

    Lihatlah, mudah bukan?

    maaf...thread ini belum selesai, nanti akan saya lanjuti lagi...