从子表单刷新父表单的数据网格

时间:2017-03-15 14:23:30

标签: c#

//Adding Data to Database Here.      
cmd = new SqlCommand("INSERT INTO itemDB(brname, itmname, itmunit,itmgr, itmmrp, itmbyp, itmdlrp, itmtx, itmdlrmrg, itmrtmrg, itmusrcode, active) VALUES (@label11, @label4, @label6, @label14, @label2, @label9, @label10, @label8, @label12, @label13, @label7, @label3)", con);
cmd.Parameters.Add("@label11", combobrand.GetItemText(combobrand.SelectedItem));
cmd.Parameters.Add("@label4", itemname.Text);
cmd.Parameters.Add("@label6", combouom.GetItemText(combouom.SelectedItem));
cmd.Parameters.Add("@label14", itemkgs.Text);
cmd.Parameters.Add("@label2", itemmrp.Text);
cmd.Parameters.Add("@label9", itembrp.Text);
cmd.Parameters.Add("@label10", itemslp.Text);
cmd.Parameters.Add("@label8", itemtax.Text);
cmd.Parameters.Add("@label12", itemdlmargin.Text);
cmd.Parameters.Add("@label13", itemretailmargin.Text);
cmd.Parameters.Add("@label7", itemcode.Text);

cmd.Parameters.Add("@label3", status);
cmd.ExecuteNonQuery();

combobrand.SelectedIndex = -1;
combouom.SelectedIndex = -1;
itemname.Text = "";
itemunit.Text = "";
itemmrp.Text = "";
itembrp.Text = "";
itemslp.Text = "";
itemtax.Text = "";
itemdlmargin.Text = "";
itemretailmargin.Text = "";
itemcode.Text = "";

MessageBox.Show("Record Saved", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();

此表单用于添加数据。按下关闭按钮后,我想刷新我的父表单数据网格。

将数据加载到form1

中的datagrid
 Public void dataload()
 {
  con.Open();
        SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM[dbo].              [itemDB]", con);
        DataTable dt = new DataTable();
        sda.Fill(dt);

        foreach (DataRow item in dt.Rows)
        {
            int n = dataGridView1.Rows.Add();
            dataGridView1.Rows[n].Cells[0].Value = item["itmcode"].ToString();
            dataGridView1.Rows[n].Cells[1].Value = item["brname"].ToString();
            dataGridView1.Rows[n].Cells[2].Value = item["itmname"].ToString();
            dataGridView1.Rows[n].Cells[3].Value = item["itmunit"].ToString();
            dataGridView1.Rows[n].Cells[4].Value = item["itmgr"].ToString();
            dataGridView1.Rows[n].Cells[5].Value = item["itmml"].ToString();
            dataGridView1.Rows[n].Cells[6].Value = item["itmpc"].ToString();
            dataGridView1.Rows[n].Cells[7].Value = item["itmtx"].ToString();
            dataGridView1.Rows[n].Cells[8].Value = item["itmbyp"].ToString();
            dataGridView1.Rows[n].Cells[9].Value = item["itmdlrmrg"].ToString();
            dataGridView1.Rows[n].Cells[10].Value = item["itmrtmrg"].ToString();
            dataGridView1.Rows[n].Cells[11].Value = item["itmdlrp"].ToString();
            dataGridView1.Rows[n].Cells[12].Value = item["itmmrp"].ToString();
            dataGridView1.Rows[n].Cells[13].Value = item["itmusrcode"].ToString();
            dataGridView1.Rows[n].Cells[14].Value = item["active"].ToString();

        }
        con.Close();
 }
  在表单2中添加数据后,

form1 datagrid没有刷新   刷新我在form1中添加了一个新按钮,然后单击该按钮i   我正在刷新datagrid的数据。   我创建的dataload函数用于将数据加载到datagrid。我在打电话   这个功能我需要的地方。

2 个答案:

答案 0 :(得分:0)

首先,您需要将父窗体中的datagridView设置为public,并覆盖用于通过以下代码添加数据的窗体上的OnClosed事件:

protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        foreach (var item in Application.OpenForms)
        {
            DataSet dataSet = new DataSet();
            using (SqlConnection connection= new SqlConnection(ConnectionString))
            {
                SqlDataAdapter adapter = new SqlDataAdapter(new SqlCommand(SelectStatement,connection));
                adapter.Fill(dataSet);
            }
            if (item.GetType()==typeof(parentForm))
            {
                (item as Form1).dataGridView1.DataSource = dataSet.Tables[0];
            }
        }
    }

答案 1 :(得分:0)

由于您几乎没有提供任何代码,我将假设您拥有"父母表格" Form1打开Form2

Form2使用您提供的命令插入数据。

一种方法是将Form2显示为对话框表单(表单位于另一个表单之上,您可以在其下方单击)。当该表单成功关闭(记录保存到数据库中)时,刷新父表单上的网格(Form1)。

因此,在Form2(子表单)上,插入数据后,设置表单DialogResult,如下所示:

//... removed previous statements for brevity
MessageBox.Show("Record Saved", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
con.Close();

//record is inserted, now return DialogResult "OK", so that the parent form can refresh grid
//this also closes this child, insert form

this.DialogResult = DialogResult.OK;

在父表单上,打开子表单后,您应该检查子表单DialogResult。如果结果正常,请刷新网格。 在您的父表单上,代码应该是这样的:

Form2 frmInsert = new Form2();
DialogResult dr = frmInsert.ShowDialog();
if (dr == DialogResult.OK)
{
    dataGridView1.Rows.Clear();
    dataload();
}
else
{
    //nothing, user didn't insert anything on insert form
}

另一种方法是从子窗体中触发事件。这允许您以任何方式显示子表单(不一定是对话框表单),只是等待事件被触发,以便您可以刷新网格。

在子表单上添加名为EventHandler的{​​{1}},就像这样(在表单的范围内)

RefreshNeeded

在您的子表单(public partial class Form2 : Form { //event handler public EventHandler RefreshNeeded; public Form2() { InitializeComponent(); } //... rest of form's code... )上,插入数据时触发事件(比如Form2):

btnInsert_Click

在父表单上,您必须订阅事件,并添加在触发事件时执行的方法:

private void button1_Click(object sender, EventArgs e)
{
    //... removed previous statements for brevity
    MessageBox.Show("Record Saved", "Saved", MessageBoxButtons.OK, MessageBoxIcon.Information);
    con.Close();

    //after data is saved, fire event!
    RefreshNeeded?.Invoke(this, new EventArgs());
}

那应该是它。如果您有任何疑问,请随时询问。