Form2的变化不能反映Form1的变化

本文关键字:变化 Form1 不能 Form2 | 更新日期: 2023-09-27 18:06:55

我的datagridview有一个问题。

表单1:用datagridview填充数据…(当我单击数据网格视图行时,相应的行值被转移到另一个表单)

格式2:我有文本按钮与保存按钮

当我单击数据网格视图行时,值被转移到另一种形式,这是正常工作.....

表单2中的

我对这些数据做了一些更改,但这些更改并没有反映在表单1的数据网格视图中…

我怎样才能解决这个问题.....

Form2的变化不能反映Form1的变化

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

例如

。Form2构造函数可以像

下面这样
Form1 myForm1;
public Form2(Form1 form1)
{
    myForm1 = form1;
}
private void SaveButtonClicked()
{
    //Refresh the Form1.DataGridView DataSource.
}

Method2

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

要回答这个问题,我们必须知道您是如何将所选GridRow的值传递给另一个表单的控件的

如果你的网格被绑定到一个数据集/数据表,例如,一旦你在UI中选择了一行,另一个表单显示了DataGridRow的字段被分解成不同的控件,你传递给另一个表单的对象是什么?

例如,我将传递链接到网格中选定行的DataRow,这样在第二种形式中,你仍然有一个对DataRow的引用,当有人改变文本框中的值时(例如),你可以手动更新DataRow列的值与用户输入的新值。

如果在之前的表单中刷新网格,您将看到更改。

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

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

这是最简单的方法。例如

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的字段值作为其构造函数的参数。Form2通过它的属性返回更新后的数据。

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

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