Form2更改不会反映Form1中的更改

时间:2011-08-28 10:44:56

标签: c# .net winforms

我遇到datagridview问题。

表单1:使用datagridview填充数据...(当我单击datagrid视图行时,相应的行值将转移到另一个表单)

表格2:我有带保存按钮的文本按钮

当我点击datagrid视图行时,值被转移到另一个表单,这是正常工作.....

在表单2中我已对该数据进行了一些更改,但此更改未反映在1 datagrid视图的表单中...

我该如何解决这个问题......

4 个答案:

答案 0 :(得分:2)

您的选择很少。将Form1实例传递给Form2并从Form2刷新Form1 DataGridView数据源是一种选择。

例如。 Form2构造函数可以如下所示

Form1 myForm1;

public Form2(Form1 form1)
{
    myForm1 = form1;
}

private void SaveButtonClicked()
{
    //Refresh the Form1.DataGridView DataSource.
}

<强>方法2

您可以通过在Form2中创建事件来调用方法来刷新Form1中的Form1 DataGridView。

答案 1 :(得分:1)

要回答这个问题,我们必须知道如何将所选GridRow的值传递给另一种形式的控件。

如果您的网格绑定到数据集/数据表,例如,一旦您在UI中选择了一行,并且显示了另一个表单,其中DataGridRow的字段被分解为不同的控件,那么您将哪些对象传递给另一个表单?

我会传递链接到网格中所选行的DataRow,这样在第二种形式中你仍然可以引用数据行,当某人更改文本框中的值时(例如)你可以手动更新datarow列的值与用户输入的新值。

以这种方式,如果在上一个表单中刷新网格,您将看到更改。

请注意这可以通过许多不同的方式完成,如果我可以从头开始编写整个逻辑,我可能不会使用这种方法,但是你说的太少,所以现在不能提出任何建议。

答案 2 :(得分:0)

如果您使用ShowDialog()方法显示Form2,则此调用将暂停Form1,直到Form2未关闭。

这是最简单的方法。 E.g。

Form1 {
    UpdateRowMethod() {
      DataRow Row = GetSelectedRow()
      Form2 frm;
      frm = new Form2(Row.Field1, Row.Field2, Row.Field3)
      if frm.ShowDialog() = OK {
         Row.Field1 = frm.Property1
         Row.Field2 = frm.Property2
         Row.Field3 = frm.Property3
         DataGridView1.InvalidateSelectedRow()
      }
   }
}

正如您所看到的,Form2接受Row的Field Values作为其构造函数的参数。 Form2通过其属性返回更新的数据。

如果您正在使用Show()方法,那么您需要实现事件/委托,以便通知Form1数据已被更改。

答案 3 :(得分:0)

在Form1中创建一个BindingSource,用它来填充Form1中的DataGridView。在调用之前将BindingSource传递给Form2。您的所有更改都将自动连接进/出。除了BindingSouce属性之外,您不需要公开Form2中的任何属性(如果您不想通过其构造函数传递它)。