In this article
I’m going to explain how to insert delete update records in
XML file using ASP.NET and C#.
What is XML?
XML was created to structure, store and transport data.
- XML stands for
EXtensible Markup Language
- XML is a markup
language much like HTML
- XML was designed
to carry data, not to display data
- XML tags are not
predefined. You must define your own tags
- XML is designed
to be self-descriptive
- XML is a W3C
Recommendation
In this article I’ll show you
how to insert delete update records in lightweight XML file.
So first we should create XML
file

This is sample xml data
structure we have created for the demo
<?xml version="1.0" standalone="yes"?>
<EmployeeDetails>
<Employee>
<empid>1001</empid>
<name>Sachin</name>
<designation>Software Engineer</designation>
<city>Chennai</city>
<country>India</country>
</Employee>
<Employee>
<empid>1002</empid>
<name>Suresh</name>
<designation>Web Developer</designation>
<city>New Delhi</city>
<country>India</country>
</Employee>
</EmployeeDetails>
Designer
Source Code:
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvEmployee"
runat="server"
AutoGenerateColumns="false"
ShowFooter="true"
style="margin-left: 113px" Width="1049px"
OnRowCommand="gvEmployee_OnRowCommand"
onrowcancelingedit="gvEmployee_RowCancelingEdit"
onrowdeleting="gvEmployee_RowDeleting" onrowediting="gvEmployee_RowEditing"
onrowupdating="gvEmployee_RowUpdating"
onpageindexchanging="gvEmployee_PageIndexChanging">
<Columns>
<asp:TemplateField HeaderText="Employee ID" HeaderStyle-Width="100px">
<ItemTemplate >
<asp:Label ID="lblEmpID" runat="server" Text='<%#DataBinder.Eval(
Container.
DataItem,"empid") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddEmpID" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name" HeaderStyle-Width="100px">
<EditItemTemplate>
<asp:TextBox ID="txtName" runat="server" Text='<%#DataBinder.Eval(
Container.
DataItem,"name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate >
<asp:Label ID="lblName" runat="server" Text='<%#DataBinder.Eval(
Container.
DataItem,"name") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddName" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Designation" HeaderStyle-Width="100px">
<EditItemTemplate>
<asp:TextBox ID="txtDesignation" runat="server" Text='<%#DataBinder.Eval(
Container.
DataItem,"designation") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate >
<asp:Label ID="lblDesignation" runat="server" Text='<%#DataBinder.Eval(
Container.
DataItem,"designation") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddDesignation" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="City" HeaderStyle-Width="100px">
<EditItemTemplate>
<asp:TextBox ID="txtCity" runat="server" Text='<%#DataBinder.Eval(
Container.
DataItem,"city") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate >
<asp:Label ID="lblCity" runat="server" Text='<%#DataBinder.Eval(
Container.
DataItem,"city") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddCity" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Country" HeaderStyle-Width="200px">
<EditItemTemplate >
<asp:TextBox ID="txtCountry" runat="server" Text='<%#DataBinder.Eval(
Container.
DataItem,"country") %>' TextMode="MultiLine"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate >
<asp:Label ID="lblCountry" runat="server" Text='<%#DataBinder.Eval(
Container.
DataItem,"country") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddCountry" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Action" HeaderStyle-Width="150px">
<EditItemTemplate>
<asp:LinkButton ID="lbtnUpdate" CommandName="Update" runat="server">
Update</asp:LinkButton>
<asp:LinkButton ID="lbtnCancel" CommandName="Cancel" runat="server">
Cancel</asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="lbtnEdit" runat="server" CommandName="Edit">
Edit</asp:LinkButton>
<asp:LinkButton ID="lbtnDelete" runat="server" CommandName="Delete">
Delete</asp:LinkButton>
</ItemTemplate>
<FooterTemplate>
<asp:LinkButton ID="lbtnAdd" runat="server" CommandName="Add">
Add</asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle BackColor="#666666" Font-Names="Cambria" ForeColor="White"
Height="30px"
/>
<RowStyle Font-Names="Calibri" />
</asp:GridView>
</div>
</form>
</body>
</html>
Code
Behind:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Xml;
public partial class _Default :
System.Web.UI.Page
{
protected void Page_Load(object
sender, EventArgs e)
{
if
(!IsPostBack)
{
BindGrid();
}
}
protected void BindGrid()
{
DataSet
ds = new DataSet();
DataTable
dt = new DataTable();
ds.ReadXml(Server.MapPath("EmployeeDetails.xml"));
if (ds
!= null && ds.HasChanges())
{
gvEmployee.DataSource = ds;
gvEmployee.DataBind();
}
else
{
gvEmployee.DataBind();
}
}
protected void gvEmployee_OnRowCommand(object
sender, GridViewCommandEventArgs e)
{
if
(e.CommandName.Equals("Add"))
{
TextBox
txtAddEmpID = (TextBox)gvEmployee.FooterRow.FindControl("txtAddEmpID");
TextBox
txtAddName = (TextBox)gvEmployee.FooterRow.FindControl("txtAddName");
TextBox
txtAddDesignation = (TextBox)gvEmployee.FooterRow.FindControl("txtAddDesignation");
TextBox
txtAddCity = (TextBox)gvEmployee.FooterRow.FindControl("txtAddCity");
TextBox
txtAddCountry = (TextBox)gvEmployee.FooterRow.FindControl("txtAddCountry");
XmlDocument
xmldoc = new XmlDocument();
xmldoc.Load(Server.MapPath("EmployeeDetails.xml"));
XmlElement
parentelement = xmldoc.CreateElement("Employee");
XmlElement
empid = xmldoc.CreateElement("empid");
XmlElement
name = xmldoc.CreateElement("name");
XmlElement
designation = xmldoc.CreateElement("designation");
XmlElement
city = xmldoc.CreateElement("city");
XmlElement
country = xmldoc.CreateElement("country");
empid.InnerText = txtAddEmpID.Text;
name.InnerText = txtAddName.Text;
designation.InnerText =
txtAddDesignation.Text;
city.InnerText = txtAddCity.Text;
country.InnerText = txtAddCountry.Text;
parentelement.AppendChild(empid);
parentelement.AppendChild(name);
parentelement.AppendChild(designation);
parentelement.AppendChild(city);
parentelement.AppendChild(country);
xmldoc.DocumentElement.AppendChild(parentelement);
xmldoc.Save(Server.MapPath("EmployeeDetails.xml"));
BindGrid();
}
}
protected void gvEmployee_RowEditing(object
sender, GridViewEditEventArgs e)
{
gvEmployee.EditIndex = e.NewEditIndex;
BindGrid();
}
protected void gvEmployee_RowDeleting(object
sender, GridViewDeleteEventArgs e)
{
BindGrid();
DataSet
ds = gvEmployee.DataSource as DataSet;
ds.Tables[0].Rows[gvEmployee.Rows[e.RowIndex].DataItemIndex].Delete();
ds.WriteXml(Server.MapPath("EmployeeDetails.xml"));
BindGrid();
}
protected void gvEmployee_RowUpdating(object
sender, GridViewUpdateEventArgs e)
{
int i =
gvEmployee.Rows[e.RowIndex].DataItemIndex;
string Name
= (gvEmployee.Rows[e.RowIndex].FindControl("txtName")
as TextBox).Text;
string
Designation = (gvEmployee.Rows[e.RowIndex].FindControl("txtDesignation")
as TextBox).Text;
string City
= (gvEmployee.Rows[e.RowIndex].FindControl("txtCity")
as TextBox).Text;
string
Country = (gvEmployee.Rows[e.RowIndex].FindControl("txtCountry")
as TextBox).Text;
gvEmployee.EditIndex = -1;
BindGrid();
DataSet
ds = (DataSet)gvEmployee.DataSource;
ds.Tables[0].Rows[i]["name"] = Name;
ds.Tables[0].Rows[i]["designation"] = Designation;
ds.Tables[0].Rows[i]["city"] = City;
ds.Tables[0].Rows[i]["country"] = Country;
ds.WriteXml(Server.MapPath("EmployeeDetails.xml"));
BindGrid();
}
protected void gvEmployee_RowCancelingEdit(object sender, GridViewCancelEditEventArgs
e)
{
gvEmployee.EditIndex = -1;
BindGrid();
}
protected void gvEmployee_PageIndexChanging(object sender, GridViewPageEventArgs
e)
{
gvEmployee.PageIndex = e.NewPageIndex;
BindGrid();
}
}