Para esta parte creamos un formulario dentro de nuestro aspx, para nuestro ejemplo utilizamos los siguientes controles:
Un Label para cargar el Id, dos TextBox y un control Editor de Ajax ToolKit (opcional). Al final le agregamos tres LinkButtons en este ejemplo se llamaran btnUpdate para actualizar o modificar el registro, btnDelete para borrar el registro y btnCancel para cancelar la acción (estos pueden ser también botones o imagenButtons o… etc.).
El codigo es el siguiente:
Antes que nada debemos asegurarnos que esten referenciados en nuestro aspx.cs
using System.Xml.Linq;
using System.Xml.XPath;
using System.Xml;
using System.Collections.Generic;
using System.IO;
Tambien debemos crear en el evento Page_Load
XDocument xmlDoc;
XmlDocument Doc = new XmlDocument();
y las variables string SampleID y string SamplePath (para este ejemplo ustedes obviaran o mejoraran esto), que se utilizaran más adelante.
1. Se crea un método ChargeInfo() para cargar los datos requeridos
void ChargeInfo()
{
var Samples = from c in xmlDoc.Descendants(«Sample»)
where c.Attribute(«SampleID»).Value.ToString() == SampleID
select new
{
Name = c.Element(«SampleName»).Value,
Date = c.Element(«SampleDate»).Value,
Description = c.Element(«SampleDescription»).Value
};
foreach(var Sample in Samples)
{
txtName.Text = Sample.Name;
txtDate.Text = Sample.Date;
txtDescription.Content = Sample.Description;
}
}
En este caso se utiliza las habilidades ninja de Linq para conectarnos con el XML y lo filtramos de acuerdo al Id que seleccionamos asignado a la variable SampleID where c.Attribute(«SampleID»).Value.ToString() == SampleID Ese SampleID final es la variable string que se creó con anterioridad y que para este ejemplo se le asigna un valor tomado por variable GET con un Response.Query (al final colocaré el código completo y será más claro este punto. Recomiendo que para comprender lo anterior más a fondo investiguen un poco en internet sobre Linq.)
2. Crear un método UpdateInfo() para ejecutarlo cuando se ejecute el evento del botón correspondiente.
void UpdateInfo()
{
XmlNode node;
node = Doc.DocumentElement;
foreach(XmlNode node1 in node.ChildNodes)
{
if(node1.Attributes[0].Value == SampleID)
{
node1.ChildNodes[0].InnerText = txtName.Text;
node1.ChildNodes[1].InnerText = txtDate.Text;
node1.ChildNodes[2].InnerText = txtDescription.Content;
}
}
Doc.Save(SamplePath);
}
Doc es la instancia creada de un XmlDocument creado en el Page_Load.
3. Creamos el metodo DeleteInfo() para Borrar registros
void DeleteInfo()
{
Doc.Load(SamplePath);
XmlNode node = Doc.SelectSingleNode(«//Samples/Sample[@SampleID=» + SampleID + «]»);
node.ParentNode.RemoveChild(node);
Doc.Save(SamplePath);
}
El codigo completo es el siguiente:
string SampleID, SamplePath;
XDocument xmlDoc;
XmlDocument Doc = new XmlDocument();
protected void Page_Load(object sender, EventArgs e)
{
SampleID = Request.QueryString[«SampleID»];
lblSampleID.Text = SampleID;
SamplePath = MapPath(«~/App_Data/Samples.xml»);
xmlDoc = XDocument.Load(SamplePath);
Doc.Load(SamplePath);
if(!IsPostBack)
ChargeInfo();
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
UpdateInfo();
}
void ChargeInfo()
{
var Samples = from c in xmlDoc.Descendants(«Sample»)
where c.Attribute(«SampleID»).Value.ToString() == SampleID
select new
{
Name = c.Element(«SampleName»).Value,
Date = c.Element(«SampleDate»).Value,
Description = c.Element(«SampleDescription»).Value
};
foreach(var Sample in Samples)
{
txtName.Text = Sample.Name;
txtDate.Text = Sample.Date;
txtDescription.Content = Sample.Description;
}
}
void UpdateInfo()
{
XmlNode node;
node = Doc.DocumentElement;
foreach(XmlNode node1 in node.ChildNodes)
{
if(node1.Attributes[0].Value == SampleID)
{
node1.ChildNodes[0].InnerText = txtName.Text;
node1.ChildNodes[1].InnerText = txtDate.Text;
node1.ChildNodes[2].InnerText = txtDescription.Content;
}
}
Doc.Save(SamplePath);
}
void DeleteInfo()
{
Doc.Load(SamplePath);
XmlNode node = Doc.SelectSingleNode(«//Samples/Sample[@SampleID=» + SampleID + «]»);
node.ParentNode.RemoveChild(node);
Doc.Save(SamplePath);
CleanText();
}
protected void btnDelete_Click(object sender, EventArgs e)
{
DeleteInfo();
}
void CleanText()
{
txtName.Text = «»;
txtDate.Text = «»;
txtDescription.Content = «»;
}
Las mejoras y los comentarios al anterior codigo van por cuenta de ustedes.
Deja una respuesta