2015-03-19 31 views
0

我有這樣的應用程序:刷新數據網格當對話框形成閉合

  • 有一個主要形式(frmMasuk)與DataGrid和「新增」按鈕
  • 當有人點擊添加新的,它顯示的對話框窗體(Form2)添加新數據。
  • 當用戶點擊對話框的形式「保存」,它將被關閉並 數據網格將被刷新

我有一個問題,當對話框窗體關閉,數據網格必須刷新。

這是我的一些代碼:

frmMasuk:

public frmMasuk() 
    { 
     InitializeComponent(); 

     SqlCommand sql = new SqlCommand("SELECT * FROM kas ORDER BY id_kas, tanggal DESC", koneksi.mykonek); 
     koneksi.openkonek(); 
     SqlDataReader reader = sql.ExecuteReader(); 
     DataTable a = new DataTable(); 
     a.Load(reader); 
     koneksi.closekonek(); 
     dgv.DataSource = a; 
     dgv.Enabled = true; 

    } 

private void button3_Click(object sender, EventArgs e) 
     { 
      frmKasNew a = new frmKasNew(); 
      a.ShowDialog(); 
     } 

frmKasNew:

private void simpankas() 
     { 
      koneksi.openkonek(); 
      DateTime tgl = Convert.ToDateTime(ttanggal.Text); 
      SqlCommand sql = new SqlCommand("INSERT INTO kas(tanggal, jenis, jumlah, keterangan) VALUES('"+ tgl +"','"+ tjenis.Text +"','" + tjumlah.Text + "','" + tket.Text +"') ",koneksi.mykonek); 
      int exe = sql.ExecuteNonQuery(); 

      if (exe == 0) 
      { 
       MessageBox.Show("Data gagal disimpan ke database", "Aplikasi KAS Usaha", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
      } 
      else 
      { 
       MessageBox.Show("Data berhasil disimpan!", "Aplikasi KAS Usaha", MessageBoxButtons.OK, MessageBoxIcon.Information); 
       this.Dispose(); 


      } 
     } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      if (ttanggal.Text == "" || tjenis.Text == "" || tjumlah.Text == "" || tket.Text == "") 
      { 
       MessageBox.Show("Harap melengkapi data sebelum menyimpan","Aplikasi KAS Usaha",MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
      } 
      else 
      { 
       simpankas(); 
      } 
      // end if 
     } 
+1

可能重複的[關閉子窗體時如何刷新datagridview?](http://stackoverflow.com/questions/2395624/how-to-refresh-datagridview-when-closing-child-form) – 2015-03-19 01:33:04

+0

但我得到了一個問題在: private void button3_Click(object sender,EventArgs e) {frmKasNew a = new frmKasNew(this); a.ShowDialog(); } .. 消息: 不包含帶1個參數的cunstructor – Dharmana 2015-03-19 01:38:05

+0

您在子窗體中忘記了這部分Form1 _owner; public Form2(Form1所有者){ _owner = owner; this.FormClosing + = new System.Windows.Forms.FormClosingEventHandler(this.Form2_FormClosing); } private void Form2_FormClosing {object sender,FormClosingEventArgs e { _owner.PerformRefresh(); } – CheGueVerra 2015-03-19 02:11:56

回答

0

添加一個事件a.OnClose事件:

private void button3_Click(object sender, EventArgs e) 
    { 
     frmKasNew a = new frmKasNew(); 
     a.FormClosed += FormClosed; 
     a.ShowDialog(); 
    } 

private void FormClosed(object sender, FormClosedEventArgs e) 
{ 
     SqlCommand sql = new SqlCommand("SELECT * FROM kas ORDER BY id_kas, tanggal DESC", koneksi.mykonek); 
     koneksi.openkonek(); 
     SqlDataReader reader = sql.ExecuteReader(); 
     DataTable a = new DataTable(); 
     a.Load(reader); 
     koneksi.closekonek(); 
     dgv.DataSource = a; 
     dgv.Enabled = true; 
    } 
+0

其中我必須放置「a.FormClosed + = FormClosed;」 ?和我必須把私人無效FormClosed(對象發件人,FormClosedEventArgs e)? – Dharmana 2015-03-19 01:46:13

+0

看我的編輯:-) – 2015-03-19 01:48:38

+0

找不到錯誤。但它不會生效:) – Dharmana 2015-03-19 02:36:39

0

你有沒有試過用這個表單來顯示一個DialogResult like

private void button3_Click(object sender, EventArgs e) 

{ 
frmKasNew kas = new frmKasNew(); 
DialogResult result = kas.ShowDialog(): 

If (result == DialogReult.OK) 
{ 
    CurrencyManager cm = (CurrencyManager) 
    dgv.BindingContext[a]; 
    cm.Refresh(); 
} 

然後使用CurrencyManager來刷新數據網格?