Добавить новую строку в строго типизированный DataSet? - PullRequest
2 голосов
/ 03 декабря 2009

У меня есть следующий XML-документ:

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

Я создал файл строго типизированных данных (.XSD) и файл MyForm.cs на основе этого файла .XSD

Тогда, как добавить нового человека в таблицу Persons?

Я попробовал этот код:

        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."

Так как решить эту проблему?

[EDIT] Вот моя схема файла Form_3.XSD: Нажмите здесь, чтобы увидеть

alt text

Ответы [ 3 ]

5 голосов
/ 03 декабря 2009

Предполагая, что Persons является DataTable в вашем типизированном экземпляре DataSet form, я полагаю, что вы пытаетесь добавить строку из одного DataTable (form.Person) в строку в другом DataTable (form.Persons) , Это невозможно, даже если две таблицы данных имеют одинаковую схему.

Чтобы исправить эту проблему (и добавить новую запись в таблицу данных о людях), добавьте изменение:

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.

2 голосов
/ 04 декабря 2009

Наконец-то! Сработало:)

Мне просто нужно было вставить эту строку:

newPerson.Form_Id = 0;

Благодаря этому фреймворк знает, куда именно вставить newPersonRow

Итак, код выглядит так:

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

Спасибо, ребята, за помощь! :)

1 голос
/ 03 декабря 2009

Попробуйте метод ImportRow.

...