To show
XML data into DataGridView , First am designing one form with some fields , one
Save button and one DataGridView Control.
The
Designed form is :
In this
article am showing following steps:
- Save data into XML file .
- Retrieve data from XML file and bind that data to DataGridview.
- Add two EDIT and DELETE columns to DataGridView.
- Write edit,delete coding in dataGridView1_CellContentDoubleClick.
Save data into XML file:
For using
XML add the following namespace:
                  using System.Xml;
Write the
following code in Save button Click:
private void
btnSave_Click(object sender, EventArgs e)
        {
                  string
path = "AccountDetails.xml";
                XmlDocument
doc = new XmlDocument();
                ////If
there is no current file, then create a new one
                if
(!System.IO.File.Exists(path))
                {
                    //Create
neccessary nodes
                    XmlDeclaration
declaration = doc.CreateXmlDeclaration("1.0",
"UTF-8", "yes");
                    XmlComment
comment = doc.CreateComment("This is an XML
Generated File");
}
                else
//If there is already a file
                {
                    //    //Load the XML File
                    doc.Load(path);
}
                    //Get
the root element
                    XmlElement
root = doc.CreateElement("BankAccount_Details");
                    XmlElement
Subroot = doc.CreateElement("BankAccount");
                    XmlElement
BankName = doc.CreateElement("BankName");
                    XmlElement
AccountNumber = doc.CreateElement("AccountNumber");
                    XmlElement
BankType = doc.CreateElement("BankType");
                    XmlElement
Balance = doc.CreateElement("Balance");
                    //Add
the values for each nodes
                    BankName.InnerText =
comboBox1.SelectedItem.ToString();
                    AccountNumber.InnerText =
txtAccNumber.Text;
                    if
(rbtnCurrent.Checked)
                        BankType.InnerText =
rbtnCurrent.Text;
                    else
if (rbtnSaving.Checked)
                        BankType.InnerText =
rbtnSaving.Text;
                    else
                        BankType.InnerText =
rbtnOther.Text;
                    Balance.InnerText =
txtBalance.Text;
                    //Construct
the document
                   
doc.AppendChild(declaration);
                    doc.AppendChild(comment);
                    doc.AppendChild(root);
                    root.AppendChild(Subroot);
                   
Subroot.AppendChild(BankName);
                   
Subroot.AppendChild(AccountNumber);
                   
Subroot.AppendChild(BankType);
                   
Subroot.AppendChild(Balance);
                    doc.Save(path);
                //Show
 message
                MessageBox.Show("Records added Successfully");
                //Reset
text fields for new input
                txtBalance.Text = String.Empty;
                txtAccNumber.Text = String.Empty;
                comboBox1.SelectedIndex = 0;
                                //To show added
record in Gridview call LoadGrid() method which I show below
LoadGrid();
}
Retrieve data from XML file and
bind  to DataGridview:
For  retrieve XML data  and bind to Gridview call the following
method:
protected void LoadGrid()
        {
            DataSet
xmlds = new DataSet();
            string
path = "AccountDetails.xml";
            if
(System.IO.File.Exists(path))
            {
                xmlds.ReadXml(path);
                if
(xmlds.Tables.Count > 0)
                {
                    dataGridView1.DataSource =
xmlds.Tables[0].DefaultView;
                }
            }
        }
Call
the above method in form page load also
private void
Account_Details_Load(object sender, EventArgs e)
        {
            LoadGrid();
        }
Add  EDIT and DELETE columns to DataGridView:
For
Editing and Deleting add two columns to DataGridView with Suitable Images. I am
adding Delete Image in 1st 
column and Edit in 2nd column. 
For deleting and editing am taking account
number as a parameter.
write the
following code in dataGridView1_CellContentDoubleClick event:
private void
dataGridView1_CellContentDoubleClick(object
sender, DataGridViewCellEventArgs e)
        {
            if
(e.RowIndex != -1)
            {
//For Deleting following code
                if
(e.ColumnIndex == 0)
                {
                    DataGridViewRow
row = dataGridView1.Rows[e.RowIndex];
                    string
acnum = row.Cells[3].Value.ToString();
                    string
path = "AccountDetails.xml";
                    XmlDocument
doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode
node = doc.SelectSingleNode("/BankAccount_Details/BankAccount[AccountNumber='"
+ acnum + "']");
                   
node.ParentNode.RemoveChild(node);
                    doc.Save(path);
                    MessageBox.Show("Selected Record Deleted Successfully");
                }   
          //For Editing
following code
                if
(e.ColumnIndex == 1)
                {
                    DataGridViewRow
row = dataGridView1.Rows[e.RowIndex];
                    int
acnum = Convert.ToInt32(row.Cells[3].Value);
                    string
path = "AccountDetails.xml";
                    XmlDocument
doc = new XmlDocument();
                    doc.Load(path);
                    XmlNode
node = doc.SelectSingleNode("/BankAccount_Details/BankAccount[AccountNumber='"
+ acnum + "']");
                   
node.ParentNode.RemoveChild(node);
                    doc.Save(path);
                    ////If
there is no current file, then create a new one
                    if
(!System.IO.File.Exists(path))
                    {
                        //Create neccessary nodes
                         XmlDeclaration declaration  = doc.CreateXmlDeclaration("1.0", "UTF-8",
"yes");
                     XmlComment
comment = doc.CreateComment("This is an XML
Generated File");
                       
doc.AppendChild(declaration);
                       
doc.AppendChild(comment);
                    }
    //If there is
already a file
                         else  
                        {
                        //    //Load the XML File
                        doc.Load(path);
                        }
                        XmlElement root = doc.CreateElement("BankAccount_Details");
                        XmlElement Subroot = doc.CreateElement("BankAccount");
                        XmlElement BankName = doc.CreateElement("BankName");
                        XmlElement AccountNumber = doc.CreateElement("AccountNumber");
                        XmlElement BankType = doc.CreateElement("BankType");
                        XmlElement Balance = doc.CreateElement("Balance");
                        //Add the values for each nodes
                        BankName.InnerText =
row.Cells[2].ToString();
                        AccountNumber.InnerText
= row.Cells[3].ToString();
                        BankType.InnerText =
row.Cells[4].ToString();
                        Balance.InnerText =
row.Cells[5].ToString();
                        //Construct the document
                        doc.AppendChild(root);
                       
root.AppendChild(Subroot);
                       
Subroot.AppendChild(BankName);
                       
Subroot.AppendChild(AccountNumber);
                       
Subroot.AppendChild(BankType);
                        Subroot.AppendChild(Balance);
                        doc.Save(path);
                        MessageBox.Show("Selected
Record Edited Successfully");
                    }
                                         LoadGrid();                 
                }
                }
Then run your application and see output :



 
No comments:
Post a Comment