Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中的不同窗体之间共享数据集_C#_Winforms_Binding_Dataset - Fatal编程技术网

C# 在C中的不同窗体之间共享数据集

C# 在C中的不同窗体之间共享数据集,c#,winforms,binding,dataset,C#,Winforms,Binding,Dataset,我创建了一个包含多个表的数据集。我在一个表单上使用了几个表,然后在另外两个表单上使用了另外两个表。当我尝试绑定数据时,我不知道如何让所有3个表单都引用同一个DataSet对象。在Visual Studio Express 2013界面中,我可以从“项目数据源”列表中选择并获取我的MainDataSet类,然后选择我想要的表。但如果我这样做,我会得到一个新的对象。其他选项似乎都不允许我选择已经存在的对象。我想我曾经看到一个从某处选择MainDataSet对象的选项,但我目前没有看到该选项,即使如此

我创建了一个包含多个表的数据集。我在一个表单上使用了几个表,然后在另外两个表单上使用了另外两个表。当我尝试绑定数据时,我不知道如何让所有3个表单都引用同一个DataSet对象。在Visual Studio Express 2013界面中,我可以从“项目数据源”列表中选择并获取我的MainDataSet类,然后选择我想要的表。但如果我这样做,我会得到一个新的对象。其他选项似乎都不允许我选择已经存在的对象。我想我曾经看到一个从某处选择MainDataSet对象的选项,但我目前没有看到该选项,即使如此,它也不允许我选择表

我知道我可以更仔细地研究绑定代码,并找出如何实现这一点,但由于其中一些代码位于设计器文件中,因此我无法修改它,因此,如果我这样做,似乎最好是用新绑定替换它所做的。看来我不该这么做。在Visual Studio GUI中必须有一种方法来实现这一点。

您应该在设计器中创建BindingSource,然后将其源设置为设计器中的数据集


然后,您可以更改表单的构造函数,将BindingSource的源设置为共享数据集。

根据SLaks的建议,下面是我所做的

我将BindingSource拖到一个窗体上,并将其命名为sharedDataSource。 在BindingSource的属性中,我通过项目数据源标题下的选定MyDataSet类设置数据源。我相信这创建了DataSource对象并将其绑定到BindingSource。 在designer中,我选择了DataGridView对象的数据源,方法是选择sharedDataSource,然后选择相应的表。 对于第二个表单中的DataGridView,我选择了其他数据源->项目数据源->MyDataSet。 我为第二个表单创建了一个构造函数,它将MyDataSet对象作为参数。在构造函数中,我将SomethingRotherBindingSource.DataSource和mainDataSet都设置为参数。我认为前者是必需的,但后者只有在代码中引用时才可能是必需的。 当我从第一个表单创建第二个表单时,我将sharedDataSource传递给构造函数。
因此,在设计器中,数据源绑定到网格,您可以使用设计器执行任何需要的操作,例如更改列大小等,但当程序运行时,数据源将更改为共享数据源。它似乎可以工作。

这听起来像是我扔掉了表单的原始BindingSource,或者我无法在设计器中使用DataGridView,因为设计器不知道数据是什么。还是我遗漏了什么?在设计器中没有选择共享BindingSource的方法吗?@ferzle:No;您扔掉表单的原始数据集。可以创建自己的绑定到共享数据集的BindingSource类。这需要在设计时和运行时都能工作,但这很棘手。这就是我的意思。通过这种方式,我创建了一个数据集,并将其绑定到第二个表单,这样我就可以在设计器中使用它,但在构造函数中,我将其绑定到共享表单,这样它就可以替换它了?这看起来很草率,我很沮丧,因为没有一种巧妙的方法来做一些看起来很常见的事情。我最终将两个字段myBindingSource.DataSource和myDataSet更新为共享数据集。我不记得了,但我假设这两个字段都是在我添加数据源时由设计器创建的。我认为更安全的做法是从第二个表单中删除生成的MyDataSet实例,并将其替换为您自己的MyDataSet实例,您可以在SecondForm.cs中声明该实例并在构造函数中初始化,使用传入的参数。为了安全起见,请比较删除myDataSet前后的SecondForm.designer.cs,并将从InitializeComponent中删除的任何相关行添加到构造函数中。