以另一种形式更新数据后刷新datagridview

时间:2014-11-27 03:47:27

标签: c# datagridview

我有两种形式。表单1在侧面有一个datagridview,表单2在里面有一个文本框和一个按钮。单击按钮后,在文本框中输入的值将插入datagridview中。 之前我使用过Show()和ShowDialog(),但是在点击按钮后会显示一个带有新数据的新表单。我也试过Update()和Refresh()但仍然无法正常工作?单击按钮后,我需要datagridview刷新,并且没有新表单出现。有人可以帮帮我吗?请....

这是我的代码:

表格1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.dataGridView1.Rows.Add(46.13, 0, 0);
        this.dataGridView1.Rows.Add(105.22, 0, 0);
        this.dataGridView1.Rows.Add(80.67, 0, 0); 
    }


    public void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 newMDIChild = new Form2();
        // Set the parent form of the child window. 
        newMDIChild.MdiParent = this;
        // Display the new form. 
        newMDIChild.Show();

    }

表格2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();

    }


    private void button1_Click(object sender, EventArgs e)
    {
        FormTest.Form1 frm = new Form1();

        frm.dataGridView1.Rows[0].Cells[0].Value = textBox1.Text;

        frm.();

    }
}

4 个答案:

答案 0 :(得分:0)

表单2按钮单击“使用此代码”

private void button1_Click(object sender, EventArgs e)
{
   Form frm=(Form)this.MdiParent;
   DataGridView dt = (DataGridView)frm.Controls["dataGridView1"];
   dt.Rows[0].Cells[0].Value = textBox1.Text;

}

答案 1 :(得分:0)

您可以使用一种方法创建回调接口以添加和更新数据。在form1中实现它,然后在form2中使用接口的参数类型创建一个新的构造函数,并在创建form2的对象时传递form1的引用(this)。

单击按钮时从form2

调用接口的方法,并在gridview中将数据更新为参数。 form2中的接口对象保存form1的引用,它将调用form1中实现的函数更新网格。

interface ICallBack { void UpdateGrid(string data); } 

public calss Class1 : ICallBack
{
        // Rest of your code

    void UpdateGrid(string data)
    {
            gridView.Rows[0].Cells[0].Value = data;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Class2 obj = new Class2(this);
        obj.Show();
    }
}

public calss Class2
{
    ICallBack callback;

    public Class2(ICallBack callback)
    {
        this.callback = callback;   
    }

    private void button1_Click(object sender, EventArgs e)
    {
        callback.UpdateGrid(textBox1.Text); 
    }
}

希望它有所帮助!

答案 2 :(得分:0)

如果您希望在另一个表单上更新/刷新datagridview。我看到两种方法: 1. DataTable(创建数据表并创建datagridview的源,如果进行更改,您将意识到更改会立即影响datagridview)

以编程方式实现它如下:假设Form-1有datagridview,Form有一些控件,你想要添加/编辑/删除数据,想要在Form-1上更改Datagridview

在Form-2上创建一个构造函数:

Form myForm1-null;
    public Form-2(Form objForm1)
    {
myForm1=objForm1;
InitializeComponent();
    }

现在您可以在任何事件中访问myForm1对象:

private void btnadd_Click(object sender, EventArgs e)
{
DataGridView dg = (DataGridView)myForm1.Controls["YourDataGridViewName"];
dg.Rows.Add();
}

现在来到Form-1并打开您调用Form-2的事件

private void btnShow_Click(object sender, EventArgs e)
{
Form-2 oFrm2 = new Form-2(this);
oFrm2.Show();
}

希望有所帮助

答案 3 :(得分:0)

最好的方法是使用委托。 使用如下代码。

假设MainForm具有数据网格。

主表单:

public MainForm()
        {
            InitializeComponent();
        }

public void form2_UpdateEventHandler(object sender, Form2.UpdateEventArgs args)
    {
        dgvItems.DataSource = GetData();
    }

private void MainForm_Load(object sender, EventArgs e)
        {
             dgvItems.DataSource =  GetData();
        }

public DataTable GetData()
        {
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandText = *your query*
            adp = new SqlDataAdapter(cmd);
            ds.Clear();
            adp.Fill(ds);
            dt = ds.Tables[0];
            con.Close();
            return dt;
        } 
//show Form 2

private void btnSave_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2(this);
            frm.UpdateEventHandler += form2_UpdateEventHandler;
            frm.ShowDialog();

        }

然后假定从表格2插入数据

表格2:

//Form 2 constructor  

public Form2(MainForm mainForm)
   {
    InitializeComponent();
   }



 public delegate void UpdateDelegate(object sender, UpdateEventArgs args);
 public event UpdateDelegate UpdateEventHandler;



 public class UpdateEventArgs : EventArgs
    {
      public string Data { get; set; }
    }



protected void InsertData()
    {
       UpdateEventArgs args = new UpdateEventArgs();
       UpdateEventHandler.Invoke(this, args);
    }



 private void btnInsertData_Click(object sender, EventArgs e)
     {
        SqlCommand cmd = new SqlCommand("SP_AddNewRow", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@param1", "Test1");
        cmd.Parameters.AddWithValue("@param2", "Test2");

    if (con.State == ConnectionState.Closed)
       {
         con.Open();
        }
    int n = cmd.ExecuteNonQuery();

    con.Close();

    if (n != 0)
    {
      //your codes if needed
       InsertData();
    }
}

希望这会有所帮助。