h1

[Visual Basic 2005] – Binding Data Tanpa DataSet maupun DataAdapter

February 28, 2008

.NET Framework menyediakan model data yang dapat digunakan sebagai cache data sementara dari database dan me-load nya ke memori lokal yaitu DataSet. Developer seringkali menggunakan data model ini untuk menampung hasil data dari query yang kemudian diolah lebih lanjut, misal, binding ke DataGridView atau ComboBox.

Permasalahannya, karena Microsoft telah menyediakan komponen-komponen dan class yang bertugas untuk melakukan binding data-data tersebut, akhirnya mau tidak mau kita tergantung kepada aturan dari komponen-komponen tersebut dan ini sedikit ribet jika data yang akan kita binding harus dilakukan pengolahan terlebih dahulu. Lebih banyak hapalannya daripada logikanya. Bahkan query yang biasa dilakukan misal, Inner-Join pun harus dilakukan dengan aturan parent-child ala DataSet yang menurut saya kurang intuitif.

Bayangkan jika data yang kita bind ke DataGridView harus dihitung dulu, diterjemahkan ke kata-kata lain, diubah dalam ComboBox kemudian menentukan SelectedIndex nya, CheckBox, dan sebagainya.

Ada alternatif lain yang mungkin sedikit melanggar “aturan resmi” yaitu melakukan fetching data dengan OdbcDataReader.

  1. Misal kita punya tabel :
    CREATE TABLE student (
    ID int,
    nama varchar(100) default '0',
    alamat varchar(200) default '',
    telp varchar(30) default '',
    sex int default '0'
    )

    Untuk contoh datanya, masukkan data-data sembarang, dengan beberapa jenis kelamin yang berbeda. Kita tentukan saja jenis kelamin yaitu “0” untuk pria dan “1” untuk wanita.
  2. Kemudian kita buat form, kita kasih nama “ViewDataSiswa” dengan komponen2 sebagai berikut :
    • DataGridView kita beri nama DataGridSiswa
      Kita tambahkan komponen2 Column sebagai berikut :
      Column :
      vb2005snap1.jpgBeri nama masing-masing column tersebut : colID, colNama, colAlamat, colTelp, colSex, colCmbDelete
      Khusus untuk colSex yang bertipe DataGridViewComboBoxColumn, tambahkan Item yang berisi : “Pria” dan “Wanita”
    • Button kita beri nama btnDelete
  3. Selanjutnya kita buat Class ProsesData sebagai berikut.
    Note : dalam eksperimen kali ini kita menggunakan ADO ConnectionString untuk koneksi ke databasenya. Buka Artikel saya sebelumnya Disini untuk penjelasan mengenai ADO ConnectionString
    Imports System.Data.Odbc Public Class ProsesDataPublic connString As String = _
    "Driver={MySQLODBC5.1Driver};" & _
    "Server=localhost;" & _
    "Database=db_windowsapplication;" & _
    "User=root;" & _
    "Password=;" & _
    "Option=4;"Dim conn As New OdbcConnection(connString)
    Dim reader As OdbcDataReader

    'ambil data dari tabel student
    Public Sub viewStudent(ByVal varDataGridView As DataGridView)

    Dim sql As String = "SELECT * FROM student"
    Dim hasil As String = ""
    Dim i As Integer = 0

    Try
    conn.Open()
    Dim cmd As OdbcCommand = New OdbcCommand(sql, conn)
    reader = cmd.ExecuteReader()

    While reader.Read
    If reader.HasRows = True Then
    With varDataGridView
    .Rows.Add()
    .Rows(i).Cells("colID").Value = reader.GetValue(0).ToString
    .Rows(i).Cells("colNama").Value = reader.GetValue(1).ToString
    .Rows(i).Cells("colAlamat").Value = reader.GetValue(2).ToString
    .Rows(i).Cells("colTelp").Value = reader.GetValue(3).ToString
    .Rows(i).Cells("colSex").Value = Me.detectSexToView(reader.GetValue(4).ToString)
    i = i + 1
    End With
    End If
    End While

    Catch ex As Exception
    MsgBox(ex.Message & " SQL : " & sql)
    End Try

    End Sub

    'deteksi Sex dari 1 atau 0 ke Pria atau Wanita
    Function detectSexToView(ByVal varSex As Integer) As String

    If (varSex = 1) Then
    Return "Pria"
    Else
    Return "Wanita"
    End If
    End Function

  4. End Class
    <code
  5. Oke, kita telah membuat inti dari pembahasan kali ini. Sekarang pada form yang telah kita buat tadi tambahkan kode berikut :
    Private Sub ViewDataSiswa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim proses as New ProsesData proses.viewStudent(DataGridSiswa)
    End Sub
    <code

  6. Compile project dan lihat hasilnya.Yang perlu diamati dari kode diatas antara lain :
    .Rows(i).Cells("colID").Value = reader.GetValue(0).ToString
    yak, kode diataslah yang berfungsi mem-fetch data langsung dari database ke column-column pada DataGridView. Pada parameter method GetValue() kenapa ada angka? itu adalah urutan column atau field pada table dimulai dari field paling kiri. Urutan ini diawali dengan nol.

    Kemudian ada lagi :


    .Rows(i).Cells("colSex").Value = Me.detectSexToView(reader.GetValue(4).ToString)

    nah kode diatas berfungsi mengubah angka 1 dan 0 pada field sex untuk dijadikan ComboBox dengan value "Pria" dan "Wanita". Lebih Sederhana dan fleksibel bukan, dibandingkan dengan harus melakukan binding "standard" menggunakan DataSet.

    Sekian dulu tutorial kali ini, simpan Form ini untuk kita gunakan pada tutorial berikutnya, yaitu Menghapus Row pada DataGridView dengan Seleksi CheckBox. C U...

2 comments

  1. Wah mas tutornya bagusni sekian lm nyari akhirnya nemu jg sx ud uji coba dgn sedikit penyesuaian akhirnya sx berhasil memanggil data dlm database untk d tampilkan ke datagridview, tank’s bng


  2. sama2…seneng bisa bermanfaat ^^



Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: