C#将表单之间的值传递给DataGridView

时间:2014-02-10 11:56:01

标签: c# datagridview

我有3个表单,比如Form1(带有datagridview1和datagridview2),Form2和Form3。在Form1中我想打开Form2,编辑文本框,当单击一个按钮时,它应该将值传递给Form1,这将把它添加到datagridview1。输入文本并传递给Form1并添加到datagridview2后,Form3也会发生相同的情况。当我单击打开Form2,编辑数据并传递它时,它将值添加到datagrid,没问题,但是当我单击打开Form3并执行第二个数据网格时,它会删除datagridview1中的数据。如何让Form1保留以前的datagrid值而不删除它。目前我还是这样:

在Form1中:

    public string value1
    {
        set { this.dataGridView1.Rows[0].Cells[0].Value = value; }
    }

    public string value2
    {
        set { this.dataGridView2.Rows[0].Cells[0].Value = value; }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.Show();
        this.Hide();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Form3 form3 = new Form3();
        form3.Show();
        this.Hide();
    }

Form2:

    public string exampleVal = "example";

    public string value
    {
        get { return exampleVal; }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 frm = new Form1();
        frm.value1 = value;
        this.Hide();
        frm.ShowDialog();
    }

Form3与Form2中的属性相同。

2 个答案:

答案 0 :(得分:0)

从您编写的代码中,您似乎每次单击按钮并隐藏旧窗体时都会创建新窗体1。 而不是每次都创建一个表单。您可以创建创建委托方法,表单1可以在表单2和表单3中添加方法。然后,当事件被调用时,表单2或表单3调用委托方法。

另一种方法是在表单2和3上创建一个事件,其中包含来自事件args类的派生,其中包含要添加的值。然后让表单1实现与表单2和3绑定的事件处理程序。

答案 1 :(得分:0)

像这样设置form2的构造函数

public class form2 : Form
{
    Form1 mainForm;
    public form2(Form1 form)
    {
        mainForm = form;
    }
    ....Some other code
 }

而不是创建新的form1使用mainForm

private void button1_Click(object sender, EventArgs e)
{
    mainForm .value1 = value;
    this.Hide();
    mainForm.Show();
}