webForumDet fria alternativet

Uppdatera gridview med xml som datasource

.NETur .NET

3 svar · 363 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 076 inlägg
Frågan#1

Hjälp!

Försöker fixa en uppdatering av min xmlfil via en gridview.
Eftersom inte automatisk uppdatering finns inbyggt med xml som datasource så blir det till att bygga själv. :)

Har kommit så här långt:

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

        XmlDocument myXml = XmlDataSource1.GetXmlDocument();
        XmlNode selectedNode = myXml.SelectSingleNode("descendant::Fuse[Name='" + e.OldValues["Name"].ToString() + "']");

        [b]Response.Write(selectedNode.ToString());[/b]

        //selectedNode.Attributes["Name"].Value = e.NewValues["Name"].ToString();
       // selectedNode.Atrtibutes["Price"].value = e.NewValues["Price"].ToString();

       // XmlDataSource1.Save();

        GridView1.DataBind();
        GridView1.EditIndex = -1;
        e.Cancel = true;
    }

Nu får jag felmeddelande: System.NullReferenceException: Object reference not set to an instance of an object. (feta raden)

Det är väl nått med raden ovanför den: myXml.SelectSingleNode...
Jag hajjar inte riktigt hur jag hämtar rätt rad ur xmlfilen!
Min xmlfil ser ut så här:

<?xml version="1.0" encoding="utf-8" ?>
<Fuses>
  <Fuse Name="16" Price="123" FloatingPrice="98" />
  <Fuse Name="20" Price="234" FloatingPrice="198" />
</Fuses>
doggelitoMedlem sedan juni 20003 076 inlägg
#2

Hittade på:t

XmlNode selectedNode = myXml.SelectSingleNode("/Fuses/Fuse[@Name='" + e.OldValues["Name"].ToString() + "']");

Kör väl på ett tag till men det känns som om det kan komma fler frågor kring detta! :)

doggelitoMedlem sedan juni 20003 076 inlägg
#3

Stött på patrull! :)

Jag la till en xsl-fil för att få till sortering av xml-filen, inga problem där.
Men nu hittar den inte längre noden som ska uppdateras av nån anledning.
Xsl-filen verkar ha egen namnsättning eller nått, hur kan jag se vad noderna heter?

Denna kod funkade innan xsl-filen men nu inte.

XmlDocument myXml = XmlDataSource1.GetXmlDocument();
        XmlNode selectedNode = myXml.DocumentElement.SelectSingleNode("/Fuses/Fuse[@Name='" + e.OldValues["Name"].ToString() + "']");

xsl-filen:

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="Fuse">
    <item>
      <xsl:attribute name='Name'>
        <xsl:value-of select="@Name"/>
      </xsl:attribute>
      <xsl:attribute name='Price'>
        <xsl:value-of select="@Price"/>
      </xsl:attribute>
      <xsl:attribute name='FloatingPrice'>
        <xsl:value-of select="@FloatingPrice"/>
      </xsl:attribute>
    </item>
  </xsl:template>

  <xsl:template match="Fuses">
    <data>
      <xsl:apply-templates select="Fuse">
        <xsl:sort select="@Name" order="ascending"/>
      </xsl:apply-templates>
    </data>
  </xsl:template>
</xsl:stylesheet>
doggelitoMedlem sedan juni 20003 076 inlägg
#4

Fixat! :)
Jag lära döpa taggarna i xsl-filen till samma namn som i xml-filen.

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="Fuse">
    <Fuse>
      <xsl:attribute name='Name'>
        <xsl:value-of select="@Name"/>
      </xsl:attribute>
      <xsl:attribute name='Price'>
        <xsl:value-of select="@Price"/>
      </xsl:attribute>
      <xsl:attribute name='FloatingPrice'>
        <xsl:value-of select="@FloatingPrice"/>
      </xsl:attribute>
    </Fuse>
  </xsl:template>

  <xsl:template match="Fuses">
    <Fuses>
      <xsl:apply-templates select="Fuse">
        <xsl:sort select="@Name" order="ascending"/>
      </xsl:apply-templates>
    </Fuses>
  </xsl:template>
</xsl:stylesheet>
142 ms totalt · 3 externa anrop · v20260731065814-full.58439ac5
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)