2010-08-31 67 views
0

我如何可以访问的数据集,它的TablesData(S)从另一个类中添加/删除/编辑行C#访问数据集的数据

我有一个WinForm和我添加一个DataGridView dataGridView1 后来我加入一个DataSet dataSet1的 然后我绑定他们的BindingSource

所有的数据将被保存在一个XML

一切工作正常,我做了一些测试项目,所有做工精细

但是当我尝试测试从另一个类添加数据行的可能性,它不会显示DataGridView上的变化!

所以我必须用Form1中和dataGridView1都dataSet1的是公共

其他类中我做了

 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); 

它正确保存文件!

但在写其他数据

我觉得我与另一个数据集是一样的我原来的一个在Form

工作,但我需要访问原始数据集的数据在主要形式

只是我需要有dataSet1作为公共静态,所以我可以访问它并将编辑数据添加到它 但是当我这样做时,Visual Studio给我错误!在窗体的视觉效果中!?!

任何建议

回答

2

如果我理解正确的...

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

如果是这样的话,那么它很明显是怎么回事...

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

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

编辑 - 为了解决这个问题...

同样,我只能推测,以现有的代码是什么样子,但你可以做这样的事情:

而不是试图访问从Form2的值(或任何其他形式是),设置窗体2有从接入到Form1开始走:

  1. 给Form2的公共财产“数据集”什么的。
  2. 当窗体2 instantiationg(大概从Form1中),简单地做到这一点:

    窗体2 reliantForm =新窗体2();

    relaintForm.DataSet = this.dataSet1;

    reliantForm.Show();

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

+0

你是绝对正确的:-) – 2010-08-31 13:24:11

+0

那么该如何解决呢? – 2010-08-31 13:50:49

+0

查看编辑答案。 – Ocelot20 2010-08-31 18:21:13