1

我如何访问 aDataSet和它TablesData(s)从另一个类添加/删除/编辑行

我有一个WinForm,我添加了

  • DataGridView dataGridView1
  • DataSet dataSet1
  • 将它们与BindingSource

所有数据都将保存在 XML 中

一切正常,我做了几个测试项目一切正常

但是当我尝试测试从另一个类中添加数据行的可能性时,它没有显示更改DataGridView!!!!

所以我有Form1dataGridView1两者dataSet1都是public

在我做的另一堂课中

var esf = new Form1();
           
DataRow pl = esf.dataSet1.Tables["MyItems"].NewRow();

pl["Type"]  = type;
pl["Name"] = true;

esf.dataSet1.Tables["MyItems"].Rows.Add(pl);

如果我添加

esf.dataSet1.WriteXml(esf.XmlSettingsFile);

它正确保存文件!

但它会覆盖其他数据

我觉得我正在使用与DataSet表单中的原始数据相同的另一个数据,但我需要DataSet在主表单中访问原始数据

只是我需要拥有dataSet1aspublic static这样我就可以访问它并向它添加编辑数据,但是当我这样做时,Visual Studio 给了我错误!在表单的视觉视图中!?!

有什么建议么

4

1 回答 1

3

如果我理解正确...

  1. 您启动项目或其他什么,并使用具有 DataGridView 的 Form1。
  2. 然后,您在另一个类中运行您的第一组代码,并添加一些新数据。
  3. 如果你把 XML 写出来,你只会得到新的东西,而 Form1 上的原始东西不见了?

如果是这样的话,那么很明显发生了什么......

  1. 您启动项目,该项目将创建 Form1 对象。
  2. 您可以在 Form1 中执行任何操作来填充 DataGridView
  3. 您运行您的第一个代码块,并且 var esf = new Form1(); 行创建一个新的 Form1 实例,它与您尝试从中提取数据的原始实例不同。
  4. 其他类中的任何代码都只是在新实例化的 Form1 上运行,这与您尝试访问的不同。

我的假设可能是错误的,因为我显然看不到您的代码,但希望这会有所帮助。

编辑 - 解决问题...

同样,我只能推测您现有代码的外观,但您可以执行以下操作:

与其尝试从 Form2(或其他任何形式)访问值,不如将 Form2 设置为从一开始就可以访问 Form1:

  1. 给 Form2 一个公共属性“DataSet”什么的。
  2. 当实例化 Form2(可能来自 Form1)时,只需执行以下操作:

    Form2 reliantForm = new Form2();

    relaintForm.DataSet = this.dataSet1;

    reliantForm.Show();

  3. Form2 现在具有对数据集的引用,并且可以根据需要对其进行操作。

于 2010-08-31T13:19:34.380 回答