Membuat Event di UserControl

User control mempunyai sifat seperti web page. Dia mempunyai event seperti Load, Init sama seperti web page. Event-event di user control dijalankan setelah event di web page. Jadi setelah Page Init, dilajutkan user control Init, setelah Page Load, User control Load dijalankan. User control juga bisa menyebabkan PostBack ke web page.

Sebagai contoh, kita buat usercontrol seperti gambar berikut.

User Control Form

Dari contoh user control diatas, Event Button ‘Simpan’ bisa dibuat di user control, terlepas dari web page. Sehingga, meskipun user control ini di pasang di webpage yang berbeda-beda, event yang dijalankan tetap sama.
Contoh:

Partial Class InfoPersonal
    Inherits System.Web.UI.UserControl

    Protected Sub btsave_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles btsave.Click
        'simpan informasinya disini
        SimpanData(tbnamaLenkap.Text, tbTempatLahir.Text, _
                   CDate(tbTglLahir.Text), tbPekerjaan.Text)
    End Sub
End Class

Dari kode diatas, ketika user control ‘InfoPersonal.ascx’ di pasang di beberapa page yang berbeda, dan button ‘Simpan’ di click, maka tiap-tiap page tetap akan menjalankan prosedur SimpanData.

Di projek yang saya kerjakan beberapa waktu yang lalu, saya menghadapi kasus semacam ini: Ketika membuat WebUserControl ini saya belum tahu apakah proses yang dijalankan Button ‘simpan’ akan sama di setiap page yang menggunakan user control ini. Setelah mengetahui bahwa proses di setiap page berbeda, mengarah ke tabel yang berbeda di database, salah satu cara adalah membuat event button ‘Simpan’ ini di masing-masing page. Jadi masing-masing page menyediakan prosedurnya sendiri.

Jika dilihat gambar diatas, event dari button ‘Simpan’ di user control tidak terdefinisi. Sehingga tidak bisa mengakses event button ‘Simpan’ di usercontrol dan membuat prosedurnya di page. Karena itu perlu dibuat event handler untuk button ‘Simpan’ click event agar dapat diakses secara langsung dari web page.

Kode di user control

Partial Class InfoPersonal
    Inherits System.Web.UI.UserControl

    Public Event SaveButtonClick(ByVal sender As Object, ByVal e As EventArgs)

    Protected Sub btsave_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles btsave.Click
        RaiseEvent SaveButtonClick(Me, e)
    End Sub
End Class

Sekarang buka webpage, dan periksa event dari user control. SaveButtonClick muncul dalam daftar event user control.

Sekarang di masing-masing page yang memuat user control, kita tinggal menambahkan kode berikut dan prosedur apa yang akan dijalankan jika button ‘simpan’ di click

Protected Sub InfoPersonal1_SaveButtonClick(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles InfoPersonal1.SaveButtonClick
    'Lakuan sesuatu disini
End Sub

Sekarang bagaimana mendapatkan data yang ada di textbox (UserControl)? Data-data yang dimasukkan di textbox usercontrol bisa diakses melalui property. Di usercontrol codebehind (InforPersonal.ascx.vb) dibuat property untuk masing-masing textbox. Melalui property inilah data didapatkan. Selain menggunakan property, juga bisa menggunakan method FindControl(). Tapi ini lebih ribet, karena kita harus tahu secara pasti ID dari control tersebut.

Cara lain adalah dengan mengirimkan data dari textboxt melalui event SaveButtonClick(). Untuk mengirim data-data dari user control melalui event langkah-langkahnya sebagai berikut

Pertama buat class EventArgument. Class ini merupakan turunan dari class EventArgs.

Public Class PersonalEventArgs
    Inherits System.EventArgs

    Public Sub New(ByVal nama As String, ByVal tempat As String, _
                   ByVal tanggal As Date, ByVal kerja As String)
        _namalengkap = nama
        _tempatlahir = tempat
        _tgllahir = tanggal
        _pekerjaan = kerja
    End Sub

    Private _namalengkap As String
    Public ReadOnly Property NamaLengkap() As String
        Get
            Return _namalengkap
        End Get
    End Property

    Private _tempatlahir As String
    Public ReadOnly Property TempatLahir() As String
        Get
            Return _tempatlahir
        End Get
    End Property

    Private _tgllahir As Date
    Public ReadOnly Property TanggalLahir() As Date
        Get
            Return _tgllahir
        End Get
    End Property

    Private _pekerjaan As String
    Public ReadOnly Property Pekerjaan() As String
        Get
            Return _pekerjaan
        End Get
    End Property
End Class

Di user control code behind, tambahkan event dan button click event, sama seperti contoh sebelumnya, tetapi dengan sedikit perubahan.

Public Event SaveButtonClick(ByVal sender As Object, ByVal e As PersonalEventArgs)

Protected Sub btsave_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btsave.Click
    Dim personalEvent As New PersonalEventArgs(tbnamaLenkap.Text, tbTempatLahir.Text, _
                        CDate(tbTglLahir.Text), tbPekerjaan.Text)
    RaiseEvent SaveButtonClick(Me, personalEvent)
End Sub

Terakhir di webpage, parameter dari eventnya akan berubah, dan data-data dari usercontrol dapat diperoleh event argumennya

Protected Sub InfoPersonal1_SaveButtonClick(ByVal sender As Object, ByVal e As PersonalEventArgs) _
Handles InfoPersonal1.SaveButtonClick
    SimpanData(e.NamaLengkap, e.TempatLahir, e.TanggalLahir, e.Pekerjaan)
End Sub

Semoga bermanfaat

About Yuniar

Penulis sekarang lebih banyak bekerja menggunakan teknologi Microsoft .NET secara umum dan TIDAK lagi menggunakan aplikasi MapXtreme.net dari MapInfo. Karena itu mohon maaf, jika pertanyaan-pertanyaan mengenai MapXtreme sudah tidak bisa saya jawab lagi.

Posted on 20 April 2011, in ASP.net and tagged , , , . Bookmark the permalink. Tinggalkan komentar.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: