【问题标题】:C# access DataSet data from another classC# 从另一个类访问 DataSet 数据
【发布时间】:2011-04-06 05:19:47
【问题描述】:

我如何访问 DataSetTablesData(s) 来添加/删除/编辑来自另一个类的行

我有一个WinForm,我添加了

  • DataGridViewdataGridView1
  • DataSetdataSet1
  • BindingSource绑定它们

所有数据都将保存在 XML 中

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

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

所以我有Form1dataGridView1dataSet1 都是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 相同,但我需要访问主表单中原始 DataSet 中的数据

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

任何建议

【问题讨论】:

    标签: c# class datagridview dataset bindingsource


    【解决方案1】:

    如果我理解正确的话……

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

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

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

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

    编辑 - 解决问题...

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

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

    1. 给 Form2 一个公共属性“DataSet”什么的。
    2. 当实例化 Form2(可能来自 Form1)时,只需这样做:

      Form2 reliantForm = new Form2();

      relaintForm.DataSet = this.dataSet1;

      reliantForm.Show();

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多