0

我有 2 个表单(Form1、Form2),每个表单都有 1 个带有修饰符Public和 1 个按钮的datagridview 。写在按钮上的代码是:-

Form2 f = new Form2();
f.Show();
f.datagridview1 = datagridview1;

问题

现在,当我按下Form1 的按钮时,会出现 Form2,但Form1 的 datagridview1 中的值不会显示在Form2 的 datagridview1 中,但是当我以编程方式检查Form2 的 datagridview1 中的值时,这些值就在那里。

尝试的解决方案

  1. datagridview1.Refresh(); - 我试图刷新 Form2 的控件,但没有看到任何变化。
  2. f.刷新();- 我什至尝试更新整个 Form2,但仍然没有看到任何变化

注意:- 我知道我不是写f.datagridview1 = datagridview1; 我可以编写一个循环来填充datagridview,但我需要知道上面的代码有什么问题。

提前致谢

4

2 回答 2

1

您不应覆盖对 dataGridView 的引用(这意味着您将从 Form1 访问 dataGridView,即使您从 Form2 访问 f.dataGridView1 也是如此),而应将两个 dataGridView 中的 DataSource 设置为同一个对象。

因此,如果您在代码中添加以下行,则可以使代码中的错误可见:

Form2 f = new Form2();
f.Show();
f.datagridview1 = datagridview1;
f.datagridview1.DataSource = null;

您会看到,突然之间,您在 Form1 中的 datagridview 将为空,因为datagridview1ANDf.datagridview1将指向 Form1 中的相同 datagridview。此外,您不能再从 From2 访问 datagridview(至少不是那么容易)。

所以也许试试这个:

f.datagridview1.DataSource = datagridview1.DataSource

此代码只会将两个 DataSource(包含实际数据)设置为两个 datagridview 中的同一个对象。

我希望这个解释有点可以理解:)

于 2016-10-24T11:21:41.873 回答
0

您可以在 BindingSource 对象上使用 ResetBindings。像那样:

//could be simpler assignment, but to give you a view on what is going on
BindingSource source = new BindingSource();
source.DataSource = f.datagridview1.DataSource;
source.ResetBindings(false);

让我知道这是否适合你

于 2016-10-24T11:21:36.320 回答