2015-03-19 33 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来刷新数据网格?