5,316,172 members and growing! (18,106 online)
Email Password   helpLost your password?
Web Development » ASP.NET » General     Intermediate

Edit XML files using a GridView

By fstrahberger

Edit XML files using a GridView
XML, VB 7.x, VB 8.0, VB, Windows, .NET, Visual Studio, ASP.NET, Dev

Posted: 4 Apr 2007
Updated: 4 Apr 2007
Views: 27,869
Announcements
Want a new Job?



Search    
Advanced Search
Sitemap
4 votes for this Article.
Popularity: 2.13 Rating: 3.55 out of 5
0 votes, 0.0%
1
0 votes, 0.0%
2
1 vote, 25.0%
3
0 votes, 0.0%
4
3 votes, 75.0%
5
Note: This is an unedited contribution. If this article is inappropriate, needs attention or copies someone else's work without reference then please Report This Article
Screenshot - 027_edit_xml.jpg

Introduction

This short article shows how to edit xml-files using a GridView control. Additional the user may create new records using some text fields and a button.

The XML document

Lets take a look at the structure of the XML file:

<?xml version="1.0" standalone="yes"?>
<Mitarbeiter>
  <ma>
    <id>1</id>
    <name>Florian 1</name>
    <phone>345</phone>
  </ma>
  ...
</Mitarbeiter>

The document contains some records holding person data. One record has a ID, name and a phone number.

The web form

First we need some controls for the web form. We need a GridView to display, edit and delete records from the xml-file. The GridView will contain two command fields ShowEditButton and SchowDeleteButton. To create new entries, I will use three TextBox fields for the columns of the record and one Button. Here is the code for the form:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="3">
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:CommandField ShowDeleteButton="True" />
            </Columns>
        </asp:GridView>
        <br />
        <br />
        <br />
        <asp:TextBox ID="txtId" runat="server"></asp:TextBox>
        <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
        <asp:TextBox ID="txtTel" runat="server"></asp:TextBox><br />
        <asp:Button ID="Button1" runat="server" Text="Button" /></div>
    </form>
</body>
</html>

The Page_Load and PageIndexChanging

At the PageLoad event I have to bind the XML file to the GridView. To do this I created a routine BindGrid() as I need to bind the GridView multiple times. In the BindGrid method, the PhysicalApplicationPath is used to get the complete path to the XML-file. Here is the code:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
   If Page.IsPostBack = False Then
      BindGrid()
   End If
End Sub

Sub BindGrid()
   Dim oDs As New DataSet
   oDs.ReadXml(Request.PhysicalApplicationPath + "XMLFile.xml")
   GridView1.DataSource = oDs
   GridView1.DataBind()
End Sub

Next I have to create a event handler to implement paging for the GridView. This is as easy as setting the PageIndex for the GridView to e.NewPageIndex.

Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
   GridView1.PageIndex = e.NewPageIndex
   BindGrid()
End Sub

Deleting records

To delete records from the file is also quiet easy. I assign the DataSource from the GridView to a DataSet object. Then I delete the record the user has selected using the DeleteButton from the GridView. Last I update the XML-file and call BindGrid().

Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
   BindGrid()
   Dim oDs As DataSet = GridView1.DataSource
   oDs.Tables(0).Rows(GridView1.Rows(e.RowIndex).DataItemIndex).Delete()
   oDs.WriteXml(Request.PhysicalApplicationPath + "XMLFile.xml")
   BindGrid()
End Sub

Updating records

Updating records means a little bit more work. First I need to set the EditIndex for the GridView using e.NewEditIndex and call BindGrid again. This has to be done in the RowEditing event:

Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing
   GridView1.EditIndex = e.NewEditIndex
   BindGrid()
End Sub

Then I implement the RowCancelingEvent. Very simple: I just have to set the EditIndex to -1 and bind the GridView.

Protected Sub GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GridView1.RowCancelingEdit
   GridView1.EditIndex = -1
   BindGrid()
End Sub

Now I need to create the code for the RowUpdating event. When this event fires I have to get the changed values for the record from the GridView controls into temporary variables. This is done using a cast (CType) from cells to Textboxes. Using the method .Text returns the current value of the control. Maybe using FindControl is much better. But anyway - here is the code:

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
   ' Get the new values from the GridView controls
   Dim i As Integer = GridView1.Rows(e.RowIndex).DataItemIndex
   Dim strId As String = CType(GridView1.Rows(e.RowIndex).Cells(2).Controls(0), TextBox).Text
   Dim strName As String = CType(GridView1.Rows(e.RowIndex).Cells(3).Controls(0), TextBox).Text
   Dim strTel As String = CType(GridView1.Rows(e.RowIndex).Cells(4).Controls(0), TextBox).Text
   GridView1.EditIndex = -1
   BindGrid()
   ' Update the XML file using the new values

   Dim oDs As DataSet = GridView1.DataSource
   oDs.Tables(0).Rows(i).Item(0) = strId
   oDs.Tables(0).Rows(i).Item(1) = strName
   oDs.Tables(0).Rows(i).Item(2) = strTel
   oDs.WriteXml(Request.PhysicalApplicationPath + "XMLFile.xml")
   BindGrid()
End Sub 

When I got the changed values, I reset the EditIndex to -1 and bind the GridView. Then I assign the DataSource from the GridView to a DataSet and update the values in the DataSet. Last the new DataSet is written to the XML file.

Creating new records

Last I have to create new records. To do this I used 3 Textboxes and a Button. When the button is clicked I create a DataSet from the DataSource of the GridView. Next I call the method Tables(0).NewRow and assign the values to the created DataRow. At the end I Add the new DataRow to the DataSet and write the XML file using oDs.WriteXml.

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
   BindGrid()
   Dim oDs As DataSet = GridView1.DataSource
   Dim oDr As DataRow = oDs.Tables(0).NewRow
   oDr("id") = txtId.Text
   oDr("name") = txtName.Text
   oDr("phone") = txtTel.Text
   oDs.Tables(0).Rows.Add(oDr)
   oDs.WriteXml(Request.PhysicalApplicationPath + "XMLFile.xml")
   BindGrid()
End Sub

Creating new records

Thats it - storing data in XML files is very easy. It is also great for deployment as we can just copy the file to the desired location. But here a short warning about this solution: it does not support transactions. The last one who stores the file will win!!!

Maybe you are interessted in a screencast about Editing XML using a GridView http://dotnet-visions.de.z.seekdotnet.com/blog/index.php?entry=entry061207-022305 (in German only).

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

fstrahberger


Florian works as consultant for change- and configuration management for about 7 years. In this environment he is often forced to work with unix, perl and shell scripts.

For more information about change- and configuration management (espacially Serena Dimensions) visit: www.venco.de

For video tutorials about asp.net, ajax, gridviews, ... (in german) visit: www.siore.com
Occupation: Web Developer
Location: Germany Germany

Other popular ASP.NET articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 7 of 7 (Total in Forum: 7) (Refresh)FirstPrevNext
Subject  Author Date 
Generalvery goodmemberAntonio Dominici S.18:50 20 May '08  
Questioncouldnot save the changes to the database using the grid view in asp.net 2.0memberscrapper1:02 23 Apr '08  
QuestionMultiple Users Deleting Rowsmembergandalf_lives4:54 15 Apr '08  
GeneralHow to load multiple level XML file and update?membermachewd15:57 7 Oct '07  
Generalthankyouby far the most easy to understandmemberassasinatedbunny9:31 4 Oct '07  
GeneralRe: thankyouby far the most easy to understandmemberfstrahberger21:29 5 Oct '07  
Generalturkish character problem?memberumurlu4:16 26 Apr '07  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 4 Apr 2007
Editor:
Copyright 2007 by fstrahberger
Everything else Copyright © CodeProject, 1999-2008
Web19 | Advertise on the Code Project