在强类型数据集中添加新行?

Posted

技术标签:

【中文标题】在强类型数据集中添加新行?【英文标题】:Add a new row into strongly typed DataSet? 【发布时间】:2009-12-03 19:02:22 【问题描述】:

我有以下 XML 文档:

<Form ID="1">
  <Persons>
    <Person Name="Mike"/>
    <Person Name="Alan"/>
  </Persons>
</Form>

我已经创建了强类型数据集文件 (.XSD) 和基于该 .XSD 文件的 MyForm.cs 文件

那么,如何在 Persons 表中添加一个新的 Person 呢?

我试过那个代码:

        Form_3 form = new Form_3();
        form.ReadXml(TextBox1.Text, XmlReadMode.Auto)
        Form3.Person newPerson= form.Person.NewPersonRow();
        newPerson.Name= "Tony";

        form.Person.Rows.Add(newPerson);

但结果是:

<Form ID="1">
  <Persons>
    <Person Name="Mike"/>
    <Person Name="Alan"/>
  </Persons>
  <Person Name="Tony"/>
</Form>

所以,我尝试了该代码:

        Form3.Person newPerson= form.Person.NewPersonRow();
        newPerson.Name= "Tony";

        form.Persons.Rows.Add(newPerson)

但这是一个例外:

  "This row already belongs to another table."

那么如何解决这个问题呢?

[编辑] 这是我的 Form_3.XSD 文件架构: Click here to see

【问题讨论】:

没有你的.xsd,很难调试这个问题。 Form3.Persons 是否有“Person”成员(带有 Rows 成员)? 托尼,我添加到我的答案中。如果没有帮助,请告诉我们。 【参考方案1】:

假设 Persons 是您键入的 DataSet 实例 form 中的一个 DataTable,我相信您正在尝试将一个 DataTable (form.Person) 中的 Row 添加到另一个 DataTable (form.Persons) 中的 Row .即使两个 DataTable 具有相同的架构,您也不能这样做。

要解决此问题(并将新记录添加到 Persons DataTable),请添加更改:

Form3.Person newPerson= form.Person.NewPersonRow();        
newPerson.Name= "Tony";        
form.Persons.Rows.Add(newPerson)

到:

Form3.PersonsRow newPerson = form.Persons.NewPersonsRow();
newPerson.Name = "Tony";
form.Persons.AddPersonsRow(newPerson);

编辑 - 架构发布后

我认为这将满足您的需求。

Form_3 form = new Form_3();
Form_3.PersonRow newPerson = form.Person.NewPersonRow();
newPerson.Person_Text = "Tony";
form.Person.AddPersonRow(newPerson);

请注意,根据您的架构(至少是屏幕截图;我没有检查您的链接), Person 表没有 Name 列。我改用了 Person_Text 字段。

【讨论】:

Jay Riggs >> 正如您所注意到的,Persons 表没有“Name”属性,因此您的代码将无法工作。【参考方案2】:

终于!成功了:)

我只需要插入那行:

newPerson.Form_Id = 0;

多亏了这个,框架才知道在哪里插入 newPersonRow

所以,代码看起来像这样:

        Form3.Person newPerson= form.Person.NewPersonRow();
        newPerson.Name= "Tony";
        newPerson.Form_Id = 0;
        form.Person.Rows.Add(newPerson);

感谢大家的帮助! :)

【讨论】:

这对我来说是救命稻草——如果可以的话,我会给你 10 个赞成票【参考方案3】:

试试 ImportRow 方法。

【讨论】:

以上是关于在强类型数据集中添加新行?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更改 .net 强类型数据集中的表名

DataTable RejectChanges 不会重置所有更改

Flow学习笔记

强类型数据表/数据集中的可空类型 - 解决方法?

Python 是强类型的吗?

删除强类型数据集中的列时出错?