在两个表单之间传递Datagrid中的数据

时间:2013-07-17 23:59:31

标签: c# winforms datagridview

我有两种形式,比如Form1和Form2。我有两个字段文件名,文件路径和一个按钮,单击时将转到表单2。表单2有一个数据网格,它有文件名和文件路径以及一个OK按钮。如果Form1中的行已经有文件路径和文件名,它应该填写在表单2中,如果我在Form2中操作该数据并单击确定按钮,数据应该以表格1更新。由于我是C#的新手,我发现这有点难以做到。能否请你就如何解决这个问题提供一些指示

2 个答案:

答案 0 :(得分:1)

原始(并且不推荐)方式是使两个数据网格视图“公共”。然后,当您退出一个数据网格上的单元格时,检查它是否为“脏”,如果是,则处理两个网格的更新。如果一个表单从另一个表单启动,一个更新将读取this.ParentForm.dgFileNames.Rows ....而另一个将是this.frmSubordinate.dgFileNames.Rows ...

更好的方法是在两个表单上都有公共方法,并在每次更新一个网格上的行时调用另一个表单的相应更新方法。

实际上,每个表单都应该定义用于添加和更新的用户定义事件,以调用其他表单的方法。这假设在网格中输入更新的情况下,两种形式始终处于打开状态。这涉及为将通过事件传递的eventData定义接口和基类。

答案 1 :(得分:0)

您可以使用Form的Modal结果轻松完成此操作。

理想情况下,您的Form2应该是这样的:

public partial class Form2 : Form
{
private string _currentValue;

//Property to get value from Form1
public string CurrentValue
{
    get { return _currentValue; }
    set { _currentValue = value; }
}

public Form2()
{
    InitializeComponent();
    //set the dialog result to be as OK when button is clicked
    button1.DialogResult = System.Windows.Forms.DialogResult.OK;
}

public string getSelectedValue()
{ 
    return dataGridView1[<the field name you need to get>, dataGridView1.CurrentRow.Index].Value.ToString();
}
}

在Form1中,将其命名为:

Form2 form2 = new Form2();
form2.CurrentValue = <Your Value from Form1>;

If (form2.DialogResult() == DialogResult.OK)
{
textBox1.Text = form2.getSelectedValue();
}