Hej, joaahl, (C#) joaahl, Jag är misstänksam på datavyn... samt SetValue i update.... joaahl , Jag gör en ny förklaring på problemet och har härmed strippat bort ALLT lull lull. Johan, Jiipiiiiiiiiiiiiiiiiiiiieeeeeeeeeeeeeeeeeee!!!!Ladda, ändra, spara XML-fil
jag söker efter ett exempel på hur jag (viss ironi eftersom jag letat länge nu):
laddar ett dataset från en xml-fil
(ändrar mitt dataset mha ex en textbox på en webbsida)
sparar min ändring tillbaka till fil
Detta som jag först trodde mycket enkla scenario har visat sig vara en raritet att finna lösningen på.
Jag har funnit ett otal olika lösningar för samma sak men mot databaser, jag vill ju använda en fil nu och då går dataadaptern bort.
Ingen som arbetat med dataset mot en fil som vet var jag kan hitta det som saknas i mina kunskaper?
mvh
JockeSv: Ladda, ändra, spara XML-fil
På <b>DataSet</b> klassen finns det två metoder som är dinna vänner i detta faller. Det heter <b>ReadXml</b> och <b>WriteXml</b>. Båda metoderna har en rad olika överlagringar (samma metod fast den tar olika antal och typer av parametrar) som gör att du kan läsa och skriva till&från många olika källor (filer, strömmar etc).
[C#]
DataSet mySet = new DataSet();
mySet.ReadXml("filename.xml");
// Gör något med ditt dataset och värdet från
// textboxen.
mySet.WriteXml("filename.xml");
[VB.NET]
Dim mySet As New DataSet()
mySet.ReadXml("filename.xml")
' Gör något med ditt dataset och värdet från
' textboxen.
mySet.WriteXml("filename.xml")
Hoppas det löser sig!
Sv: Ladda, ändra, spara XML-fil
Jo just det... men det verkar som om jag bara kan adda nya noder men inte editera befintlig som visas.
Dessutom så bör det in ett schema för att skrika till om jag addar nod med samma id, men det är nästa puck.
Sedan fick jag rådet att lägga in setet i ett XML doc för att arbeta med datat men med samma resultat, lägga till går bra men inte editera.
Förstår du vad jag menar eller skall jag hacka ihop ett nytt exempel som visar var jag går bet?
Det är precis därr du hoppar över kod som det inte är korrekt.
mvh
Jocke Sv: Ladda, ändra, spara XML-fil
Visa gärna hur du försöker ändra befintliga noder i det inladdade dokumentet, för det skall gå. Och med <b>ReadXml</b> och <b>WriteXml</b> kan man välja att ladda in / spara ut ett schema med, slå upp metoderna i dokumentationen och titta på de överlagringar som finns.Sv: Ladda, ändra, spara XML-fil
Har dock sett smidiga lösningar med typade dataset men då krävs en hel del ombyggnad på annat håll.
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
// Filen är bantad för forumet
namespace joacim
{
/// <summary>
/// Summary description for hack.
/// </summary>
public class hack : System.Web.UI.Page
{
private DataSet ds = new DataSet("poliser");
private DataView dv;
protected System.Web.UI.WebControls.DataGrid Grid;
private XmlDataDocument xml = new XmlDataDocument();
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
LoadGrid();
BindGrid();
}
else
{
LoadGrid();
}
}
private void LoadGrid()
{
if( Session["data"] == null )
{
if(Page.IsPostBack)
{
// Session timeout...
}
ds.ReadXml(@"c:\inetpub\fil.xml");
Session["data"] = ds;
}
ds = (DataSet) Session["data"];
DataTable dt = ds.Tables["polis"];
dv = new DataView(dt);
}
private void BindGrid()
{
Session["data"] = ds;
Grid.DataSource = dv;
Grid.DataBind();
}
private void EditGrid(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
Grid.DataKeyField = "id";
Grid.EditItemIndex = e.Item.ItemIndex;
BindGrid();
}
private void UpdateGrid(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string m_id;
TextBox m_namn;
m_id = e.Item.Cells[0].Text;
m_namn = (TextBox) e.Item.Cells[1].Controls[0];
// Följande line verkar möjligen vara feltolkad av mig ??
ds.Tables["polis"].Rows[Convert.ToInt32(m_id)].ItemArray.SetValue(m_namn.Text,1);
ds.AcceptChanges();
ds.WriteXml(@"c:\inetpub\fil2.xml"); // för test.. annars fil.xml
Grid.EditItemIndex = -1;
BindGrid();
}
private void CancelGrid(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
Grid.DataKeyField = "id";
Grid.EditItemIndex = -1;
BindGrid();
}
}
Sv: Ladda, ändra, spara XML-fil
Två tips (hinner inte kolla din kod nu, måste avsluta lite kod som skall vidare till en annan kodare), men när du skriver in kod så kan du lägga det inom < code c# > </ code > (utan mellanslag) så blir det färgkodat. Mitt andra tips är att du kan redigera tidigare inlägg om du måste ändra (så som att komplettera) innehållet.
Ska se om jag hinner kolla igenom koden sen när jag kommer hem.Sv: Ladda, ändra, spara XML-fil
Varför fungerar inte de befintliga Set och Get funktionerna?
Jo visst fungerar Get utmärkt men dennes kollega Set har jag inte klurat ut en workaround för ännu....
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace joacim
{
public class problem : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox txtShowValue;
protected System.Web.UI.WebControls.Button btnSetValue;
protected System.Web.UI.WebControls.Button btnGetValue;
private DataSet ds = new DataSet();
private void Page_Load(object sender, System.EventArgs e)
{
ds.ReadXml(@"c:\inetpub\data.xml");
}
#region Web Form Designer generated code
#endregion
private void btnSetValue_Click(object sender, System.EventArgs e)
{
// Set texten 'Olle' på rad 1 i tabell 'person' i kolumn 1
ds.Tables["person"].Rows[1].ItemArray.SetValue("Olle",1); // INTE OK ??
ds.AcceptChanges();
ds.WriteXml(@"c:\inetpub\data.xml",XmlWriteMode.IgnoreSchema);
}
private void btnGetValue_Click(object sender, System.EventArgs e)
{
// Get texten 'Olle' på rad 1 i tabell 'person' i kolumn 1
txtShowValue.Text = ds.Tables["person"].Rows[1].ItemArray.GetValue(1).ToString(); //OK
}
}
/**********************************************
* data.xml
* ********************************************
<?xml version="1.0" encoding="utf-8" ?>
<data>
<person>
<id>0</id>
<namn>Klara</namn>
</person>
<person>
<id>1</id>
<namn>Elin</namn>
</person>
</data>
***********************************************
* problem.aspx innehållet
***********************************************
<form id="Form1" method="post" runat="server">
<P>
<asp:Button id="btnGetValue" runat="server" Text="Get"></asp:Button></P>
<P>
<asp:TextBox id="txtShowValue" runat="server"></asp:TextBox></P>
<P>
<asp:Button id="btnSetValue" runat="server" Text="Set"></asp:Button></P>
</form>
*/
}
Jag blir gråhårigare än nånsin.... :)
mvh
Jocke
Sv: Ladda, ändra, spara XML-fil
Du är väldigt närma, men komplicerar till det lite mer än vad som behövs. Nedan finner du ett exempel på hur man kan läsa & skriva till en XML från webbsidan. XML filen heter data.xml och ligger i rooten på webbprojektet.
[XML]
<?xml version="1.0" standalone="yes"?>
<books>
<book>
<name>Book 1</name>
<author>Andreas</author>
</book>
<book>
<name>Book 2</name>
<author>Johan</author>
</book>
</books>
[ASP.NET]
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebXMLEdit.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</head>
<body>
<form id="Form1" method="post" runat="server">
<p>
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox></P>
<p>
<asp:Button id="Button1" runat="server" Text="Get"></asp:Button>
<asp:Button id="Button2" runat="server" Text="Set"></asp:Button>
</p>
</form>
</body>
</html>
[C#]
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Button Button2;
private DataSet xmlData = null;
private void Page_Load(object sender, System.EventArgs e)
{
xmlData = new DataSet();
xmlData.ReadXml(Server.MapPath(@"data.xml"));
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
this.TextBox1.Text =
(string)this.xmlData.Tables["Book"].Rows[0]["Name"];
}
private void Button2_Click(object sender, System.EventArgs e)
{
this.xmlData.Tables["Book"].Rows[0]["Name"] =
this.TextBox1.Text;
this.xmlData.WriteXml(Server.MapPath(@"data.xml"));
}
}
Hoppas det löser sig!
Sv: Ladda, ändra, spara XML-fil
Men varför finns dessa Set och Get-funktioner om de inte går att köra??
Tack för den bit som fick allt annat arbete att fortlöpa utan ombyggnader....
Taaaack
mvh
Jocke