Jumat, 24 Januari 2014

Membuat Aplikasi PayRoll Menggunakan C# dan MySql Versi 1 - Bag. 4

Baiklah, kali ini saya akan melanjutkan pembahasan mengenai Membuat Aplikasi Payroll Menggunakan C# dan MySql V1. Pada postingan sebelumnya, kita telah membahas pembuatan User Interface (Presentation Layer), Class Gologan dan Jabatan (Class Entity), dan Class GolonganDAO dan JabatanDAO (Class DAO).
Sekarang adalah tahap akhir yang akan kita lakukan, yaitu melengkapi kode di Presentation Layer. Agar mengingat kembali pembahasan sebelumnya, berikut saya tampilkan 3 gambar Form yang telah kita buat :

 
  
Form Menu Utama, Form Golongan dan Form Jabatan

Sebelum kita melengkapi kode di presentation layer, kita akan terlebih dahulu membuat file XML dan menambahkan class DBConnection di dalam project AplikasiPayroll. Untuk koneksi ke database MySql, kita akan membutuhkan string koneksi berikut :

   10 SERVER=nama_server;DATABASE=nama_database;UID=user_database;PASSWORD=password_user

Terlihat dengan jelas ada beberapa informasi yang tentunya tidak ingin kita hardcode di program, kita ambil contoh informasi nama_server dan nama_database.
Kalo dulu mungkin kita biasanya meyimpan informasi tersebut di registry windows atau file dengan format INI, tapi kali ini kita akan memanfaatkan file XML yang sudah disediakan .NET

Untuk membuat file XML, silahkan ikuti langkah-langkah berikut :

 
  
Membuat File XML

Kemudian kita lengkapi kode nya :
    1 <?xml version="1.0" encoding="utf-8" ?>
    2 <configuration>
    3   <appSettings>
    4     <!-- Lokasi server, bisa juga langsung diganti dengan ip address -->
    5     <add key="Server" value="192.168.1.131"/>
    6 
    7     <!-- Nama Database -->
    8       <add key="Database" value="DB_PayrollDAO"/> 
    9   </appSettings>
   10 </configuration>

Selesai ...

Untuk mengakses file XML tersebut akan kita lakukan melalui class DBConnection.

Note :
Sebelumnya maaf ya, di gambar-gambar sebelumnya saya sudah membuat class DBConnection dan lain-lain, sehingga apabila anda melihat kenapa kok ada gambar-gambar class, form, file xml atau lain-lain, anda jangan bingung karena project yang saya tampilkan adalah project yang sudah jadi. Khusus untuk class DBConnection, pada gambar-gambar sebelum nya anda akan melihat namanya adalah DBConnections.cs, sepertinya ada salah ejaan, tetapi sudah saya perbaiki dengan cara mengganti namanya dengan DBConnection.cs,yang dapat dilihat pada gambar-gambar berikutnya di bawah ini. Cara memperbaikinya cukup mudah, pada Jendela Solution Explorer klik kanan saja pada class tersebut kemudian rename dan Enter, beres.

Saya anggap anda belum membuat class DBConnection, mari kita buat :

 
 
Membuat Class DBConnection

Jangan lupa tambahkan namespace MySql.Data.MySqlClient dan access modifier public. Sepertinya tidak perlu saya jelaskan lagi, dah tau kan.. fungsinya ?. :-)
Sedangkan namespace System.Configuration berfungsi agar kita bisa menggunakan class ConfigurationSettings untuk mengakses file XML yang sudah kita buat sebelumnya.

Lengkapi kode di class DBConnection.cs menjadi seperti berikut :

    1 using System;
    2 using System.Collections.Generic;
    3 using System.Linq;
    4 using System.Text;
    5 
    6 using MySql.Data.MySqlClient;
    7 using System.Configuration;
    8 
    9 namespace AplikasiPayrollDAO
   10 {
   11     public class DBConnection
   12     {
   13         private MySqlConnection conn = null;
   14         private static DBConnection dbConn = null;
   15 
   16         //constructor
   17         private DBConnection()
   18         {
   19             if (conn == null)
   20             {        
   21                     //Baca informasi yang ada pada file xml(App.config)
   22                     string server = ConfigurationSettings.AppSettings["Server"];
   23                     string database = ConfigurationSettings.AppSettings["Database"];
   24 
   25                     string user = "APPPYRL";
   26                     string password = "1q2w3e4r";
   27 
   28                     string strConn = "SERVER=" + server + "; DATABASE=" + database + "; UID=" + user + "; PASSWORD=" + password;
   29 
   30                     conn = new MySqlConnection(strConn);
   31                     conn.Open();                              
   32             }
   33         }
   34 
   35         public static DBConnection GetInstance()
   36         {
   37             if (dbConn == null)
   38             {
   39                 dbConn = new DBConnection();
   40             }
   41 
   42             return dbConn;
   43         }
   44 
   45         public MySqlConnection GetConnection()
   46         {
   47             return this.conn;
   48         }
   49     }
   50 }

Sampai di sini persiapan kita sudah selesai, sekarang saatnya kita melengkapi kode di Form Menu Utama, Form Golongan dan Form Jabatan.


  • Menambahkan kode pada Form Menu Utama
Masuk ke bagian code editor Form Menu Utama dengan cara klik kanan Form Menu Utama dan pilih View Code :


Tambahkan kode seperti berikut :

  

Kemudian double klik golonganToolStripMenuItem : 


Lengkapi kodenya :

   34 private void golonganToolStripMenuItem_Click(object sender, EventArgs e)
   35         {
   36             frmGolongan fGLG = new frmGolongan(conn);
   37             fGLG.MdiParent = this;
   38             fGLG.Show();
   39         }

Lakukan hal yang sama pada jabatanToolStripMenuItem, kemudian lengkapi kodenya :

   41 private void jabatanToolStripMenuItem_Click(object sender, EventArgs e)
   42         {
   43             frmJabatan fJBT = new frmJabatan(conn);
   44             fJBT.MdiParent = this;
   45 
   46             fJBT.Show();
   47         }


  • Menambahkan kode pada Form Golongan
Buka Form Golongan (frmGolongan.cs).
Masuk ke editor code nya, dan lengkapi kode seperti berikut :

-> Menampilkan Data Golongan :
Tambahkan Fungsi LoadDataGolongan() di dalam editor code frmGolongan :
   91 private void LoadDataGolongan()
   92         {        
   93             List<Golongan> daftarGlg = glgDAO.GetAll();
   94             DGV.DataSource = daftarGlg.ToArray();
   95             DGV.ReadOnly = true;
   96         }
Kemudian edit constructor frmGolongan :
   25  //constructor
   26         public frmGolongan(DBConnection conn)
   27         {
   28             InitializeComponent();
   29 
   30                 //buat objek glgDAO untuk mengakses operasi database
   31                 glgDAO = new GolonganDAO(conn.GetConnection());
   32 
   33 
   34             LoadDataGolongan();
   35         }

-> Menambahkan Method msgInfo() dan msgInfo2() :
Method msgInfo() berfungsi untuk menampilkan jendela dengan sebuah tombol OK, sedangkan fungsi msgInfo2() berguna untuk menampilkan jendela pemberitahuan dengan tombol Yes dan No.
Di dalam editor code frmGolongan, tuliskan kode berikut :
   49 private void msgInfo(string prompt)
   50         {
   51             MessageBox.Show(prompt, "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information);
   52         }
   53 
   54         private bool msgInfo2(string prompt)
   55         {
   56             if (MessageBox.Show(prompt, "Question", MessageBoxButtons.YesNo) == DialogResult.Yes)
   57             {
   58                 return true;
   59             }
   60             else
   61             {
   62                 return false;
   63             }
   64         }

-> Menyimpan/Mengubah Data :
Double klik btnSimpan, tambahkan kode berikut :
   98 private void btnSimpan_Click(object sender, EventArgs e)
   99         {
  100             if (txtGolongan.Text == "" || txtTjSuamiIstri.Text == "" || txtTjAnak.Text == "" || txtUangMakan.Text == "" || txtUangLembur.Text == "" || txtAskes.Text == "")
  101             {
  102                 msgInfo("Data yang anda isikan belum lengkap");
  103             }          
  104             else if (txtGolongan.Text.Length > 4 || txtTjSuamiIstri.Text.Length > 11 || txtTjAnak.Text.Length > 11 || txtUangMakan.Text.Length > 11 || txtUangLembur.Text.Length > 11 || txtAskes.Text.Length > 11)
  105             {
  106                 msgInfo("Kolom Golongan maksimal 4 karakter/digit !!!\nKolom lain tidak boleh lebih dari 11 karakter/digit angka !!! ");
  107             }
  108             else
  109             {               
  110                 Golongan glg = new Golongan();
  111 
  112                 glg.Tk_Golongan = txtGolongan.Text;
  113                 glg.TJ_Suami_Istri = int.Parse(txtTjSuamiIstri.Text);
  114                 glg.TJ_Anak = int.Parse(txtTjAnak.Text);
  115                 glg.Uang_Makan = int.Parse(txtUangMakan.Text);
  116                 glg.Uang_Lembur = int.Parse(txtUangLembur.Text);
  117                 glg.Askes = int.Parse(txtAskes.Text);
  118 
  119                 resultBool = glgDAO.CheckRecords(txtGolongan.Text);
  120 
  121                 if (resultBool == false)
  122                 {
  123                     result = glgDAO.Save(glg);
  124 
  125                     if (result > 0)
  126                     {
  127                         txtGolongan.Focus();
  128                         msgInfo("Data berhasil disimpan");
  129                     }
  130                     else
  131                     {
  132                         msgInfo("Data gagal disimpan");
  133                     }
  134                 }
  135                 else
  136                 {
  137                     if (msgInfo2("Sudah terdapat Tingkat Golongan " + txtGolongan.Text + ". Apakah anda akan mengupdate data ini ?") == true)
  138                     {
  139                         result = glgDAO.Update(glg);
  140 
  141                         if (result > 0)
  142                         {
  143                             msgInfo("Data Golongan berhasil di-update");
  144                         }
  145                         else
  146                         {
  147                             msgInfo("Data Golongan gagal di-update");
  148                         }
  149                     }
  150                     else
  151                     {
  152                         clearTextBox();
  153                     }                         
  154                 }
  155 
  156                 LoadDataGolongan();
  157             }          
  158         }

-> Menghapus Data :
Double klik Tombol Hapus (btnHapus). Tambahkan kode berikut :
  175 private void btnHapus_Click(object sender, EventArgs e)
  176         {
  177             if (txtGolongan.Text == "")
  178             {
  179                 msgInfo("Isi Kolom Golongan terlebih dahulu !!!");
  180             }
  181             else
  182             {
  183                 if (msgInfo2("Apakah anda yakin akan menghapus data Golongan dengan Kode " + txtGolongan.Text + "?") == true)
  184                 {
  185                     result = glgDAO.Delete(txtGolongan.Text);
  186 
  187                     if (result > 0)
  188                     {
  189                         msgInfo("Data Golongan berhasil dihapus !!!");
  190                     }
  191                     else
  192                     {
  193                         msgInfo("Data Golongan gagal dihapus !!!");
  194                     }
  195                 }
  196                 else
  197                 {
  198                     clearTextBox();
  199                 }
  200 
  201                 LoadDataGolongan();
  202             }
  203         }

-> Membatalkan Input Data :
Terlebih dahulu buat method clearTextBox dalam class frmGolongan :
   37 private void clearTextBox()
   38         {
   39             txtGolongan.Clear();
   40             txtTjSuamiIstri.Clear();
   41             txtTjAnak.Clear();
   42             txtUangMakan.Clear();
   43             txtUangLembur.Clear();
   44             txtAskes.Clear();
   45 
   46             txtGolongan.Focus();
   47         }

Kemudian double klik Tombol Batal (btnBatal) dan tambahkan kode berikut :
  170 private void btnBatal_Click(object sender, EventArgs e)
  171         {
  172             clearTextBox();
  173         }

-> Menutup Form Golongan :
Double klik Tombol Tutup (btnTutup) dan lengkapi kode :
  165 private void btnTutup_Click(object sender, EventArgs e)
  166         {
  167             this.Close();
  168         }

-> Membuat Method ConvertToUpper() dan NumericOnly()
Method ConvertToUpper() berguna agar setiap string yang di-inputkan di dalam txtGolongan selalu di konversi ke huruf Capital. Sedangkan method NumericOnly() mengharuskan setiap karakter yang diketikkan ke dalam txtTjSuamiIstri, txtTjAnak, txtTjUangMakan, txtTjUangLembur dan TjAskes  adalah bertipe Numerik (angka 0-9).
Di dalam class frmGolongan tambahkan kode berikut :
   66  private string ConvertToUpper(string kata)
   67         {
   68             return kata.ToUpper();
   69         }
   70 
   71         private bool NumericOnly(System.Windows.Forms.KeyPressEventArgs e)
   72         {
   73             string strValid = "0123456789";
   74 
   75             if (strValid.IndexOf(e.KeyChar) < 0 && !(e.KeyChar == Convert.ToChar(Keys.Back)))
   76             {
   77                 msgInfo("Masukan Angka !!!.\nDan jumlah maksimum angka yang boleh anda masukan adalah 11 digit !!!");
   78                 return true; //Not valid
   79             }
   80             else
   81             {
   82                 return false; //Valid
   83             }
   84         }

-> Method pada Event KeyPress TextBox :
Klik txtTjSuamiIstri, kemudian pada jendela Properties pilih tab Events dan double klik pada event KeyPress :
Masukkan kode berikut :
  160         private void txtTjSuamiIstri_KeyPress(object sender, KeyPressEventArgs e)
  161         {
  162             e.Handled = NumericOnly(e);
  163         }
Lakukan hal yang sama pada txtTunjanganAnak, txtUangMakan, txtUangLembur, dan txtAskes :
  232         private void txtTjAnak_KeyPress(object sender, KeyPressEventArgs e)
  233         {
  234             e.Handled = NumericOnly(e);
  235         }
  236 
  237         private void txtUangMakan_KeyPress(object sender, KeyPressEventArgs e)
  238         {
  239             e.Handled = NumericOnly(e);
  240         }
  241 
  242         private void txtUangLembur_KeyPress(object sender, KeyPressEventArgs e)
  243         {
  244             e.Handled = NumericOnly(e);
  245         }
  246 
  247         private void txtAskes_KeyPress(object sender, KeyPressEventArgs e)
  248         {
  249             e.Handled = NumericOnly(e);
  250         }

-> Method pada Event PreviewKeyDown Textbox txtGolongan :
Klik sekali txtGolongan, kemudian pada jendela Properties pilih tab Events dan double klik pada event PreviewKeyDown :
  215         private void txtGolongan_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
  216         {
  217             if (e.KeyCode == Keys.Tab)
  218             {
  219                 txtGolongan.Text = ConvertToUpper(txtGolongan.Text);
  220                 Golongan glg = glgDAO.GetByTkGolongan(txtGolongan.Text);
  221                 if (glg != null)
  222                 {
  223                     txtTjSuamiIstri.Text = (glg.TJ_Suami_Istri).ToString();
  224                     txtTjAnak.Text = (glg.TJ_Anak).ToString();
  225                     txtUangMakan.Text = (glg.Uang_Makan).ToString();
  226                     txtUangLembur.Text = (glg.Uang_Lembur).ToString();
  227                     txtAskes.Text = (glg.Askes).ToString();
  228                 }
  229             }
  230         }

-> Method pada Event SelectionChanged pada Datagrid View (DGV) :
Klik sekali pada DGV, kemudian pada jendela Properties pilih tab Events dan double klik pada event SelectionChanged :

Ketikkan kode berikut :
  205         private void DGV_SelectionChanged(object sender, EventArgs e)
  206         {
  207             txtGolongan.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[0].Value.ToString();
  208             txtTjSuamiIstri.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[1].Value.ToString();
  209             txtTjAnak.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[2].Value.ToString();
  210             txtUangMakan.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[3].Value.ToString();
  211             txtUangLembur.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[4].Value.ToString();
  212             txtAskes.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[5].Value.ToString();
  213         }

Alhamdulillah.., sampai disini selesai sudah pekerjaan kita melengkapi kode di Form Golongan. Selanjutnya kita akan melengkapi kode di Form Jabatan, mari kita lakukan dengan mengikuti langkah-langkah berikut ini.


  • Menambahkan kode pada Form Jabatan
Buka Form Jabatan (frmJabatan.cs). Masuk ke editor code nya, dan lengkapi kode nya. Perhatikan gambar berikut :
 
-> Menampilkan Data Jabatan :
Tambahkan Fungsi LoadDataJabatan() di dalam editor code frmJabatan :
   32 private void LoadDataJabatan()
   33         {
   34             List<Jabatan> daftarJbt = jbtDAO.GetAll();
   35             DGV.DataSource = daftarJbt.ToArray();
   36             DGV.ReadOnly = true;
   37         }
Kemudian edit constructor frmJabatan :
   24 public frmJabatan(DBConnection conn)
   25         {
   26             InitializeComponent();
   27 
   28             //buat objek jbtDAO untuk mengakses operasi database
   29             jbtDAO = new JabatanDAO(conn.GetConnection());
   30 
   31             LoadDataJabatan();  //Tambahkan baris kode ini
   32         }

-> Menambahkan Method msgInfo() dan msgInfo2()
Method msgInfo() berfungsi untuk menampilkan jendela pemberitahuan dengan sebuah tombol OK, sedangkan msgInfo2() berfungsi untuk menampilkan jendela pemberitahuan dengan tombol Yes dan No.
Di dalam editor code frmJabatan, tuliskan kode berikut :
   49 private void msgInfo(string prompt)
   50         {
   51             MessageBox.Show(prompt, "Informasi", MessageBoxButtons.OK, MessageBoxIcon.Information);
   52         }
   53 
   54         private bool msgInfo2(string prompt)
   55         {
   56             if (MessageBox.Show(prompt, "Question", MessageBoxButtons.YesNo) == DialogResult.Yes)
   57             {
   58                 return true;
   59             }
   60             else
   61             {
   62                 return false;
   63             }
   64         }


-> Membatalkan Input Data Jabatan
Terlebih dahulu buat Method clearTextBox dalam class frmJabatan :
   61  private void clearTextBox()
   62         {
   63             txtKodeJbt.Clear();
   64             txtNamaJbt.Clear();
   65             txtGajiPokok.Clear();
   66             txtTJJbt.Clear();
   67 
   68             txtKodeJbt.Focus();
   69         }
Kemudian double klik Tombol Batal (btnBatal) dan lengkapi kode :
   71 private void btnBatal_Click(object sender, EventArgs e)
   72         {
   73             clearTextBox();
   74         }

-> Menyimpan/Mengubah Data Jabatan
Double klik btnSimpan, tambahkan kode berikut :
   77 private void btnSimpan_Click(object sender, EventArgs e)
   78         {
   79             if (txtKodeJbt.Text == "" || txtNamaJbt.Text == "" || txtGajiPokok.Text == "" || txtTJJbt.Text == "")
   80             {
   81                 msgInfo("Data belum lengkap, lengkapi terlebih dahulu...");
   82             }
   83             else if(txtKodeJbt.Text.Length > 4 || txtNamaJbt.Text.Length > 20 || txtGajiPokok.Text.Length > 11 || txtTJJbt.Text.Length > 11)
   84             {
   85                 msgInfo("Kode Jabatan Maks. 4 karakter\n Nama Jabatan Maks. 20 Karakter\n Gaji Pokok Maks. 11 digit angka\n Tunjangan Jabatan Maks. 11 digit angka");
   86             }
   87             else
   88             {
   89                 Jabatan jbt = new Jabatan();
   90 
   91                 jbt.Kode_Jabatan = txtKodeJbt.Text;
   92                 jbt.Nama_Jabatan = txtNamaJbt.Text;
   93                 jbt.Gaji_Pokok = int.Parse(txtGajiPokok.Text);
   94                 jbt.TJ_Jabatan = int.Parse(txtTJJbt.Text);
   95 
   96                 //cek record tabel Jabatan dengan kode record txtKodeJbt.text
   97                 resultBool = jbtDAO.CheckRecords(txtKodeJbt.Text);
   98 
   99                 if (resultBool == false)
  100                 {
  101                     result = jbtDAO.Save(jbt);
  102 
  103                     if (result > 0)
  104                     {
  105                         txtKodeJbt.Focus();
  106                         msgInfo("Data Jabatan berhasil disimpan...");
  107                     }
  108                     else
  109                     {
  110                         msgInfo("Data Jabatan gagal disimpan...");
  111                     }
  112                 }
  113                 else
  114                 {
  115                     if (msgInfo2("Sudah terdapat data dengan Kode Jabatan : " + txtKodeJbt.Text + ". Apakah anda akan meng-update data tersebut ?") == true)
  116                     {
  117                         result = jbtDAO.Update(jbt);
  118 
  119                         if (result > 0)
  120                         {
  121                             msgInfo("Data Jabatan dengan Kode Jabatan " + txtKodeJbt.Text + " berhasil di-update...");
  122                         }
  123                         else
  124                         {
  125                             msgInfo("Data Jabatan dengan Kode Jabatan " + txtKodeJbt.Text + " gagal di-update...");
  126                         }
  127                     }
  128                     else
  129                     {
  130                         clearTextBox();
  131                     }
  132                 }
  133 
  134                 LoadDataJabatan();
  135             }
  136         }
 
-> Menghapus Data Jabatan
Double klik Tombol Hapus (btnHapus). Tambahkan kode berikut :
  139 private void btnHapus_Click(object sender, EventArgs e)
  140         {
  141             if (txtKodeJbt.Text == "")
  142             {
  143                 msgInfo("Isi Kode Jabatan terlebih dahulu...");
  144             }
  145             else
  146             {
  147                 if (msgInfo2("Apakah anda yakin akan menghapus data Jabatan dengan Kode Jabatan = " + txtKodeJbt.Text + " ?") == true)
  148                 {
  149                     result = jbtDAO.Delete(txtKodeJbt.Text);
  150 
  151                     if (result > 0)
  152                     {
  153                         msgInfo("Data Jabatan dengan Kode Jabatan " + txtKodeJbt.Text + " berhasil dihapus...");
  154                     }
  155                     else
  156                     {
  157                         msgInfo("Data Jabatan dengan Kode Jabatan " + txtKodeJbt.Text + " gagal dihapus...");
  158                     }
  159                 }
  160                 else
  161                 {
  162                     clearTextBox();
  163                 }
  164 
  165                 LoadDataJabatan();
  166             }
  167         }

-> Menutup Form Jabatan
Double klik Tombol Tutup (btnTutup) dan lengkapi kode :
  170  private void btnTutup_Click(object sender, EventArgs e)
  171         {
  172             this.Close();
  173         }

-> Method ConvertToUpper() dan NumericOnly()
Method ConvertToUpper() berguna agar setiap string yang di-inputkan di dalam txtKodeJbt dan txtNamaJbt selalu di konversi ke huruf Capital. Sedangkan method NumericOnly() mengharuskan setiap karakter yang diketikkan ke dalam txtGajiPokok dan txtTJJbt  adalah bertipe Numerik (angka 0-9).
Di dalam class frmJabatan tambahkan kode berikut :
   66         private string ConvertToUpper(string kata)
   67         {
   68             return kata.ToUpper();
   69         }
   70 
   71         private bool NumericOnly(System.Windows.Forms.KeyPressEventArgs e)
   72         {
   73             string strValid = "0123456789";
   74 
   75             if (strValid.IndexOf(e.KeyChar) < 0 && !(e.KeyChar == Convert.ToChar(Keys.Back)))
   76             {
   77                 msgInfo("Masukan Angka !!!.\nDan jumlah maksimum angka yang boleh anda masukan adalah 11 digit !!!");
   78                 return true; //Not valid
   79             }
   80             else
   81             {
   82                 return false; //Valid
   83             }
   84         }

-> Method pada Event KeyPress Textbox
Klik sekali pada textbox txtGajiPokok, lalu pada jendela Properties pilih tab Events, kemudian klik 2x pada KeyPress. Lakukan juga pada textbox txtTJJbt :
Lengkapi kode :
  196 private void txtGajiPokok_KeyPress(object sender, KeyPressEventArgs e)
  197         {
  198             e.Handled = NumericOnly(e);
  199         }
  200 
  201         private void txtTJJbt_KeyPress(object sender, KeyPressEventArgs e)
  202         {
  203             e.Handled = NumericOnly(e);
  204         }

-> Method pada Event PreviewKeyDown Textbox
Klik sekali pada textbox txtKodeJbt, lalu pada jendela Properties pilih tab Events, kemudian klik 2x pada PreviewKeyDown :
Lengkapi kode :
  208 private void txtKodeJbt_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
  209         {
  210             if (e.KeyCode == Keys.Tab)
  211             {
  212                 txtKodeJbt.Text = ConvertToUpper(txtKodeJbt.Text);
  213                 Jabatan jbt = jbtDAO.GetByKodeJabatan(txtKodeJbt.Text);
  214 
  215                 if (jbt != null)
  216                 {
  217                     txtNamaJbt.Text = jbt.Nama_Jabatan;
  218                     txtGajiPokok.Text = (jbt.Gaji_Pokok).ToString();
  219                     txtTJJbt.Text = (jbt.Gaji_Pokok).ToString();
  220                 }
  221             }
  222         }

-> Method pada Event PreviewKeyDown Textbox
Klik sekali pada Data Grid View (DGV), lalu pada jendela Properties pilih tab Events, kemudian klik 2x pada SelectionChanged :
 Lengkapi kodenya :
  224 private void DGV_SelectionChanged(object sender, EventArgs e)
  225         {
  226             txtKodeJbt.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[0].Value.ToString();
  227             txtNamaJbt.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[0].Value.ToString();
  228             txtGajiPokok.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[0].Value.ToString();
  229             txtTJJbt.Text = DGV.Rows[DGV.CurrentRow.Index].Cells[0].Value.ToString();
  230         }

Alhamdulillah.., akhirnya selesai juga pembuatan Aplikasi Payroll ini. Untuk saat ini pembuatan aplikasi Payroll ini saya cukupkan sampai di 2 tabel (tabel golongan dan tabel jabatan) saja. Mungkin lain waktu saya akan berikan contoh lanjutan pada tabel yang lain sebagai bonus dalam tutorial ini (Insya Allah).
Sebenarnya sampai di sini kita sudah melakukan cukup banyak hal, antara lain program ini terdiri dari Form Induk (Form Menu Utama) dan Form Anak (Form Golongan dan Form Jabatan, program ini telah menerapkan konsep OOP (Objek Oriented Programming) karena setiap variabel / konstanta maupun fungsi, semuanya di sederhanakan menjadi sebuah objek dari sebuah class, karena telah berorientasi pada objek, maka penyebutan variabel / konstanta menjadi properti dan penyebutan fungsi menjadi method.

Untuk mempermudah mengikuti tutorial ini, saya sudah siapkan project aplikasi ini dalam bentuk file .zip. Silahkan download di sini.

Sampai jumpa ...






3 komentar:

  1. wah keren...
    mas nanya nih,untuk membuat role gimana ya.
    misalkan user1 hanya bisa membuka form golongan saja dan form lain tidak boleh melihat.

    thx

    BalasHapus
    Balasan
    1. he2.., belum baca sampe abis ya ? nih kan dah ada di bagian 5 :
      http://havizul.blogspot.com/2014/02/membuat-aplikasi-payroll-menggunakan-c.html

      Hapus
  2. Are you trying to earn cash from your traffic by using popup advertisments?
    In case you do, have you ever considered using Pop Cash?

    BalasHapus