C#从另一个类访问DataSet数据

时间:2010-08-31 11:09:59

标签: c# class dataset

我如何访问DataSet以及它的TablesData(s)来添加/删除/编辑来自另一个类的行

我有一个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

中的原始DataSet相同的DataSet

但我需要访问主窗体

中原始DataSet中的数据

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

任何建议

1 个答案:

答案 0 :(得分:2)

如果我理解正确......

  1. 启动项目或其他任何内容,并使用具有DataGridView的Form1。
  2. 然后,您在另一个类中运行第一组代码,并添加一些新数据。
  3. 如果你写出XML,那么获取新内容,而Form1上的原始内容却丢失了?
  4. 如果是这种情况,那么很明显发生了什么......

    1. 启动项目,创建Form1对象。
    2. 您在Form1中执行任何操作以填充DataGridView
    3. 你运行你的第一个代码块,var esf = new Form1(); line创建一个Form1的新实例,它与您尝试从中提取数据的原始实例不同。
    4. 来自其他类的任何代码都只是在新实例化的Form1上运行,这与您尝试访问的不同。
    5. 我的假设可能是错误的,因为我显然看不到你的代码,但希望这会有所帮助。

      编辑 - 解决问题...

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

      不是尝试从Form2(或其他其他表单)访问值,而是设置Form2以便从一开始就可以访问Form1:

      1. 为Form2提供公共属性“DataSet”或其他内容。
      2. 当实例化Form2(可能来自Form1)时,只需执行此操作:

        Form2 reliantForm = new Form2();

        relaintForm.DataSet = this.dataSet1;

        reliantForm.Show();

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