GridView XML Edit Delete Insert Update

GridView Xml Edit Delete Insert Update
GridView XML Edit Delete Insert Update.

In this post i'm explaining how to Edit Delete Insert and update XML file data in GridView using C# and VB.Net in Asp.Net.

Read GridView XMLDataSource Example to know how to use XMLDataSource in GridView with XSLT schema.

For this example i have created a XML file with three fields Firstname,LastName and Location and XML file looks like mentioned below.




  
Amit Jain Mumbai
User 3 Noida
User 4 Bangalore

I have placed one gridview on aspx page and three textbox in editItemTemplate of gridview for editing, one button and three textbox in Footer Template for Inserting new records in XML file.

HTML SOURCE OF PAGE
<asp:GridView ID="gridviewXMLInsertEditDelete" runat="server" 
AutoGenerateColumns="False" ShowFooter="True" 
onRowCancelingEdit="gridviewXMLInsertEditDelete_RowCancelingEdit" 
onRowDeleting="gridviewXMLInsertEditDelete_RowDeleting" 
onRowEditing="gridviewXMLInsertEditDelete_RowEditing" 
onRowUpdating="gridviewXMLInsertEditDelete_RowUpdating" 
onRowCommand="gridviewXMLInsertEditDelete_RowCommand">
<Columns>
<asp:CommandField ShowEditButton="true" />
<asp:CommandField ShowDeleteButton="true" />
<asp:TemplateField HeaderText="First Name">
<ItemTemplate>
<asp:Label ID="lblFname" runat="server" 
           Text='<%#Eval("FirstName") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtFirstName" runat="server" 
             Text='<%#Bind("FirstName") %>'>
</asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:Button ID="btnInsert" runat="server" 
            Text="Insert" CommandName="InsertXMLData"/>
<asp:TextBox ID="txtFirstNameInsert" runat="server">
</asp:TextBox>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Last Name">
<ItemTemplate>
<asp:Label ID="lblLname" runat="server" 
           Text='<%#Eval("LastName") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtLastName" runat="server" 
             Text='<%#Bind("LastName") %>'>
</asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtLastNameInsert" runat="server">
</asp:TextBox>
</FooterTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Location">
<ItemTemplate>
<asp:Label ID="lblLocation" runat="server" 
           Text='<%#Eval("Location") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtLocation" runat="server" 
             Text='<%#Bind("Location") %>'>
</asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtLocationInsert" runat="server">
</asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

c# CODE
protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            BindGridView();
    }
    protected void BindGridView()
    {
        DataSet dsGridViewXMLEditDeleteUpdate = new DataSet();
        dsGridViewXMLEditDeleteUpdate.ReadXml(Server.MapPath("~/App_Data/XMLFile.xml"));
        gridviewXMLInsertEditDelete.DataSource = dsGridViewXMLEditDeleteUpdate;
        gridviewXMLInsertEditDelete.DataBind();
        gridviewXMLInsertEditDelete.ShowFooter = true;
    }

    protected void gridviewXMLInsertEditDelete_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        BindGridView();
        DataSet dsGridViewXMLDelete = (DataSet)gridviewXMLInsertEditDelete.DataSource;
        dsGridViewXMLDelete.Tables[0].Rows[gridviewXMLInsertEditDelete.Rows[e.RowIndex].DataItemIndex].Delete();
        dsGridViewXMLDelete.WriteXml(Server.MapPath("~/App_Data/XMLFile.xml"));
        BindGridView();

    }
    protected void gridviewXMLInsertEditDelete_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gridviewXMLInsertEditDelete.ShowFooter = false;
        gridviewXMLInsertEditDelete.EditIndex = e.NewEditIndex;
        BindGridView();
    }
    protected void gridviewXMLInsertEditDelete_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        int index = gridviewXMLInsertEditDelete.Rows[e.RowIndex].DataItemIndex;
        string firstName = ((TextBox)gridviewXMLInsertEditDelete.Rows[e.RowIndex].FindControl("txtFirstName")).Text;
        string lastName = ((TextBox)gridviewXMLInsertEditDelete.Rows[e.RowIndex].FindControl("txtLastName")).Text;
        string location = ((TextBox)gridviewXMLInsertEditDelete.Rows[e.RowIndex].FindControl("txtLocation")).Text;
        gridviewXMLInsertEditDelete.EditIndex = -1;
        BindGridView();
        DataSet dsUpdateXMLFile = (DataSet)gridviewXMLInsertEditDelete.DataSource;
        dsUpdateXMLFile.Tables[0].Rows[index]["FirstName"] = firstName;
        dsUpdateXMLFile.Tables[0].Rows[index]["LastName"] = lastName;
        dsUpdateXMLFile.Tables[0].Rows[index]["Location"] = location;
        dsUpdateXMLFile.WriteXml(Server.MapPath("~/App_Data/XMLFile.xml"));
        BindGridView();
        
    }
    protected void gridviewXMLInsertEditDelete_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        gridviewXMLInsertEditDelete.EditIndex = -1;
        BindGridView();
    }
    
    protected void gridviewXMLInsertEditDelete_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        
        if(e.CommandName == "InsertXMLData")
        {
        string firstname = ((TextBox)gridviewXMLInsertEditDelete.FooterRow.FindControl("txtFirstNameInsert")).Text;
        string lastname = ((TextBox)gridviewXMLInsertEditDelete.FooterRow.FindControl("txtLastNameInsert")).Text;
        string location = ((TextBox)gridviewXMLInsertEditDelete.FooterRow.FindControl("txtLocationInsert")).Text;
        BindGridView();
        DataSet dsXMLInsert = (DataSet)gridviewXMLInsertEditDelete.DataSource;
        DataRow drInsert = dsXMLInsert.Tables[0].NewRow();
        drInsert["FirstName"] = firstname;
        drInsert["LastName"] = lastname;
        drInsert["Location"] = location;
        dsXMLInsert.Tables[0].Rows.Add(drInsert);
        dsXMLInsert.WriteXml(Server.MapPath("~/App_Data/XMLFile.xml"));
        BindGridView();
        }
    }

VB.NET CODE
Protected Sub Page_Load(sender As Object, e As EventArgs)
 If Not Page.IsPostBack Then
  BindGridView()
 End If
End Sub
Protected Sub BindGridView()
 Dim dsGridViewXMLEditDeleteUpdate As New DataSet()
 dsGridViewXMLEditDeleteUpdate.ReadXml(Server.MapPath("~/App_Data/XMLFile.xml"))
 gridviewXMLInsertEditDelete.DataSource = dsGridViewXMLEditDeleteUpdate
 gridviewXMLInsertEditDelete.DataBind()
 gridviewXMLInsertEditDelete.ShowFooter = True
End Sub

Protected Sub gridviewXMLInsertEditDelete_RowDeleting(sender As Object, e As GridViewDeleteEventArgs)
 BindGridView()
 Dim dsGridViewXMLDelete As DataSet = DirectCast(gridviewXMLInsertEditDelete.DataSource, DataSet)
 dsGridViewXMLDelete.Tables(0).Rows(gridviewXMLInsertEditDelete.Rows(e.RowIndex).DataItemIndex).Delete()
 dsGridViewXMLDelete.WriteXml(Server.MapPath("~/App_Data/XMLFile.xml"))
 BindGridView()

End Sub
Protected Sub gridviewXMLInsertEditDelete_RowEditing(sender As Object, e As GridViewEditEventArgs)
 gridviewXMLInsertEditDelete.ShowFooter = False
 gridviewXMLInsertEditDelete.EditIndex = e.NewEditIndex
 BindGridView()
End Sub
Protected Sub gridviewXMLInsertEditDelete_RowUpdating(sender As Object, e As GridViewUpdateEventArgs)
 Dim index As Integer = gridviewXMLInsertEditDelete.Rows(e.RowIndex).DataItemIndex
 Dim firstName As String = DirectCast(gridviewXMLInsertEditDelete.Rows(e.RowIndex).FindControl("txtFirstName"), TextBox).Text
 Dim lastName As String = DirectCast(gridviewXMLInsertEditDelete.Rows(e.RowIndex).FindControl("txtLastName"), TextBox).Text
 Dim location As String = DirectCast(gridviewXMLInsertEditDelete.Rows(e.RowIndex).FindControl("txtLocation"), TextBox).Text
 gridviewXMLInsertEditDelete.EditIndex = -1
 BindGridView()
 Dim dsUpdateXMLFile As DataSet = DirectCast(gridviewXMLInsertEditDelete.DataSource, DataSet)
 dsUpdateXMLFile.Tables(0).Rows(index)("FirstName") = firstName
 dsUpdateXMLFile.Tables(0).Rows(index)("LastName") = lastName
 dsUpdateXMLFile.Tables(0).Rows(index)("Location") = location
 dsUpdateXMLFile.WriteXml(Server.MapPath("~/App_Data/XMLFile.xml"))
 BindGridView()

End Sub
Protected Sub gridviewXMLInsertEditDelete_RowCancelingEdit(sender As Object, e As GridViewCancelEditEventArgs)
 gridviewXMLInsertEditDelete.EditIndex = -1
 BindGridView()
End Sub

Protected Sub gridviewXMLInsertEditDelete_RowCommand(sender As Object, e As GridViewCommandEventArgs)

 If e.CommandName = "InsertXMLData" Then
  Dim firstname As String = DirectCast(gridviewXMLInsertEditDelete.FooterRow.FindControl("txtFirstNameInsert"), TextBox).Text
  Dim lastname As String = DirectCast(gridviewXMLInsertEditDelete.FooterRow.FindControl("txtLastNameInsert"), TextBox).Text
  Dim location As String = DirectCast(gridviewXMLInsertEditDelete.FooterRow.FindControl("txtLocationInsert"), TextBox).Text
  BindGridView()
  Dim dsXMLInsert As DataSet = DirectCast(gridviewXMLInsertEditDelete.DataSource, DataSet)
  Dim drInsert As DataRow = dsXMLInsert.Tables(0).NewRow()
  drInsert("FirstName") = firstname
  drInsert("LastName") = lastname
  drInsert("Location") = location
  dsXMLInsert.Tables(0).Rows.Add(drInsert)
  dsXMLInsert.WriteXml(Server.MapPath("~/App_Data/XMLFile.xml"))
  BindGridView()
 End If
End Sub

Build and run the application.

Download Sample Code


If you like this post than join us or share

1 comments:

ekestler said...

I have a number of XML files with similar, but not exact, structure -- they all share common columns, but a few have more columns, each differing. For instance, all of them have Name, City, Title, but some of them also have Department, and one or two have Project. I'd like to use one solution for all of them...so how do I define the item templates dynamically?