【问题标题】:Refresh Datagrid When Dialog Form Closed对话框关闭时刷新数据网格
【发布时间】:2015-05-22 01:01:33
【问题描述】:

我有一个这样的应用程序:

  • 有一个主窗体 (frmMasuk) 带有数据网格和“添加新”按钮
  • 当有人点击 Add New 时,会显示对话框 (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
        }

【问题讨论】:

  • 但我遇到了一个问题:private void button3_Click(object sender, EventArgs e) { frmKasNew a = new frmKasNew(this); a.ShowDialog(); } .. 消息:不包含带 1 个参数的 cunstructor
  • 您在子表单 Form1 _owner 中忘记了这一部分;公共 Form2(Form1 所有者){ _owner = 所有者; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form2_FormClosing); } private void Form2_FormClosing(object sender, FormClosingEventArgs e) { _owner.PerformRefresh(); }

标签: c#


【解决方案1】:

在 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;
    }

【讨论】:

  • 我必须在哪里放置“a.FormClosed += FormClosed;” ?我必须在哪里放置 private void FormClosed(object sender, FormClosedEventArgs e) ?
  • 尝试数据源 = null;数据源 = a;
  • 我还添加了“enviroment.exit();”它也不起作用。 FormClosed(....) 下的everyting 不生效
  • 函数是否被调用?刷新数据的代码是否正确?
  • 另外,我把 a.FormClosed += FormClosed;a.ShowDialog(); 之前的代码搞砸了反映这种变化的答案。
【解决方案2】:

您是否尝试过使用 DialogResult 显示表单,例如

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 刷新数据网格?

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2012-08-18
    相关资源
    最近更新 更多