2009-12-03 5 views
2

Я следующий документ XML:Добавить новую строку в строго типизированный DataSet?

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

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

Затем, как добавить нового человека в таблицу Лица?

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

 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) 

но это thows исключение:

"This row already belongs to another table." 

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

[EDIT] Вот мой Form_3.XSD файл схемы: Click here to see

alt text http://img710.imageshack.us/img710/8831/xsd.png

+0

Без вашего .xsd очень сложно отладить эту проблему. Имеет ли Form3.Persons член «Человек» (с членом Rows)? –

+0

ok, я отредактировал тему – Tony

+0

Тони, я добавил к своему ответу. Сообщите нам, если это не поможет. –

ответ

2

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

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

newPerson.Form_Id = 0; 

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

Таким образом, код выглядит следующим образом:

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

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

+0

@ Тони, вы должны принять это как ответ –

+1

Это было для меня спасением - я бы дал вам 10 голосов, если бы мог –

1

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

+0

Это была моя проблема. Благодаря! – dwaz

5

Предполагая, что люди являются DataTable в типизированном экземпляре DataSet form, я считаю, что вы пытаетесь добавить строку из одного DataTable (form.Person) в строку в другой DataTable (form.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); 

EDIT - после того, как схема была размещена

Я думаю, что это сделает то, что вам нужно.

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

Обратите внимание, что в соответствии с вашей схемой (скриншот, по крайней мере, я не проверял вашу ссылку), таблица Person не имеет имени столбца.Вместо этого я использовал поле Person_Text.

+0

Jay Riggs >> Как вы заметили, таблица «Персоны» не имеет свойства «Имя», поэтому ваш код не будет работать. – Tony

Смежные вопросы