Avatar billede odegaard Nybegynder
06. juni 2003 - 21:26 Der er 3 kommentarer og
1 løsning

Redigering af nestede dataset

Jeg har en XML-fil jeg har indlæst i et datasæt.
XML-filen består af en masse image-records som disse:
-------------------------
<image>
  <filename>billede.jpg</filename>
  <height>640</height>
  <width>480</width>
  <description>Lidt tekst</description>
  <comments>
    <comment name="Jens Jørgen" date="10-06-2003 12:34">Sejt billede!</comment>
    <comment name="Bo Ib" date="10-06-2003 16:34">Endnu en kommentar</comment>
  </comments>
</image>
<image>
  <filename>billede2.jpg</filename>
  <height>640</height>
  <width>480</width>
  <description/>
  <comments/>
</image>
-------------------------
Lad os nu sige at jeg gerne vil tilføje en <comment> til <comments>.
Ved at bruge select-kommandoen på datasættet kan jeg sagtens finde en post jeg vil tilføje en comment til. Posten gemmer jeg i matches[]. Dvs. jeg kan hente den første (og eneste) række blandt comments således:

DataRow comments = matches[0].GetChildRows(ds.Relations["image_comments"])[0]; //Indeholder alle <comment> i en <image>

Herefter kan jeg fint oprette en nye datarow jeg vil tilføje til datasettet vha.

dr = comments.GetChildRows(ds.Relations["comments_comment"])[0].Table.NewRow();
<...tilføj data til dr...>
dr.SetParentRow(comments,ds.Relations["comments_comment"]); //faktisk ikke sikker på om denne linje er nødvendig
comments.GetChildRows(ds.Relations["comments_comment"])[0].Table.Rows.Add(dr);


Problemet opstår når jeg gerne vil tilføje til den post der ikke indeholder nogen <comment> i forvejen (som fx. den sidste post i XML-eksemplet).

Jeg forsøgt en masse krumspring for at oprette en ny <comment> manuelt og tilføje, men uden held. Jeg har jo ikke en række jeg kan basere en NewRow() på.
Avatar billede odegaard Nybegynder
06. juni 2003 - 21:29 #1
Jeg forsøgte iøvrigt at lave en datatable der indeholdt de samme felter som <comment> og så tilføje denne. Men her får jeg en fejl om at der ikke er en relation, når jeg forsøger mig med dr.SetParentRow(...)
Avatar billede odegaard Nybegynder
06. juni 2003 - 21:30 #2
...øh benyttede selvfølgelig den oprettede datatable til at lave en NewRow() jeg kunne tilføje til et andet dataset.
Avatar billede odegaard Nybegynder
06. juni 2003 - 23:07 #3
Nå.. nu har jeg sat et XSD på, så jeg styrer hvad min XML indeholder.
Derfor har jeg kunne koge det ned til:

DataRow comments = ds.Tables["Comments"].NewRow();
DataRow comment = ds.Tables["Comment"].NewRow();
comment.SetParentRow(comments,ds.Relations["comments_comment"]);
comments.SetParentRow(matches[0],ds.Relations["image_comments"]);
ds.Tables["Comment"].Rows.Add(comment);
ds.Tables["Comment2"].Rows.Add(comments);

...men når jeg forsøge at add'e rækkerne til sidst får jeg fejlen:
System.Data.InvalidConstraintException: ForeignKeyConstraint comments_comment requires the child key values (5) to exist in the parent table.

Hvordan sikrer jeg så det?
Avatar billede odegaard Nybegynder
06. juni 2003 - 23:12 #4
Glem det. Det lykkedes sgu!
De sidste to linjer skal blot byttes om!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester