SIGN UP MEMBER LOGIN:    
ARTICLE

Reading and Manipulating an Xml file Using C#.Net (Including Images)

Posted by Prashanth Chindam Articles | XML in C# October 22, 2010
This article shows development of a windows application to read an xml file; perform insert, search, update and delete operations, and navigation of records and display respective images.
Reader Level:
Download Files:
 

Objective:

To develop a windows application to read an xml file; perform insert, search, update and delete operations, and navigation of records and display respective images.

Design:

1.gif

Design the form as above with 1 DataGridView, 1 PictureBox control, 2 OpenFileDialog controls, 4 Labels, 4 TextBoxes and 12 Buttons.

->PictureBox1 Properties:
    BorderStyle=Fixed3D; SizeMode=StrechImage

Code:

using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.VisualBasic;
using System.IO;

namespace xmlapp
{
    public partial class studdata : Form
    {  
        public studdata()
        {
            InitializeComponent();
        }
        DataSet ds; string fpath, fdir, ppath, pname, pdestin; int rno = 0; DataRow drow;
        private void loadbtn_Click(object sender, EventArgs e)
        {
            try
            {   
                openFileDialog1.Filter = "xml|*.xml|all files|*.*";
                DialogResult res = openFileDialog1.ShowDialog();
                if (res == DialogResult.OK)
                {
                    dataGridView1.DataSource = null;
                    clearbtn.PerformClick();
                    fpath = openFileDialog1.FileName;
                    ds = new DataSet();
                    ds.ReadXml(fpath);              
                    //setting primary key inorder to search a record using finding method
                    ds.Tables[0].Constraints.Add("pk_sno", ds.Tables[0].Columns[0], true);
                    dataGridView1.DataSource = ds.Tables[0];
                    fdir = fpath.Substring(0, fpath.LastIndexOf("\\") + 1);
                    showdata();
                }
            }
            catch
            { MessageBox.Show("invalid input");  }
        }
        void showdata()
        { 
            if (ds.Tables[0].Rows.Count > 0)
            { 
                pictureBox1.Image = null;
                sno_txtbx.Text = ds.Tables[0].Rows[rno][0].ToString();
                sname_txtbx.Text = ds.Tables[0].Rows[rno][1].ToString();
                course_txtbx.Text = ds.Tables[0].Rows[rno][2].ToString();
                fee_txtbx.Text = ds.Tables[0].Rows[rno][3].ToString();
                pictureBox1.ImageLocation = fdir + ds.Tables[0].Rows[rno][4].ToString();
            }
            else
                MessageBox.Show("No records");
        }
        private void browsebtn_Click(object sender, EventArgs e)
        {
            openFileDialog2.InitialDirectory = fdir;
            openFileDialog2.Filter = "bmp,jpeg,png|*.bmp;*.jpg;*.png|all files|*.*";
            DialogResult res = openFileDialog2.ShowDialog();
            if (res == DialogResult.OK)
            {
                pictureBox1.ImageLocation = openFileDialog2.FileName;
            }
        }
        private void insertbtn_Click(object sender, EventArgs e)
        {
            drow = null;
            drow = ds.Tables[0].Rows.Find(sno_txtbx.Text);
            if (drow == null)
            {
                drow = ds.Tables[0].NewRow();
                drow[0] = sno_txtbx.Text;
                drow[1] = sname_txtbx.Text;
                drow[2] = course_txtbx.Text;
                drow[3] = fee_txtbx.Text;
                phototask();   
                drow[4] = pname;
                ds.Tables[0].Rows.Add(drow);
rno = ds.Tables[0].Rows.IndexOf(drow);
                ds.WriteXml(fpath);
                MessageBox.Show("record inserted");
            }
            else
            MessageBox.Show("sno. should be unique");
        }
        void phototask()
        {
            //finding name of photo ,saving it in directory of xml file with unique name(sno+photo name)
            ppath = pictureBox1.ImageLocation;
            pname = sno_txtbx.Text + ")" + (ppath.Substring(ppath.LastIndexOf('\\') + 1));//(sno + photo name)
            pdestin = fdir + pname;
            pictureBox1.Image.Save(pdestin);
        }
        private void searchbtn_Click(object sender, EventArgs e)
        {
            int n = Convert.ToInt32(Interaction.InputBox("Enter sno to search:", "Search", "10", 200, 200));
            //searching using find method
            drow = null;
            drow = ds.Tables[0].Rows.Find(n);
            if (drow != null)
            {
                rno = ds.Tables[0].Rows.IndexOf(drow);
                sno_txtbx.Text = drow[0].ToString();
                sname_txtbx.Text = drow[1].ToString();
                course_txtbx.Text = drow[2].ToString();
                fee_txtbx.Text = drow[3].ToString();
                pictureBox1.ImageLocation = fdir + drow[4];
            }
            else
                MessageBox.Show("record not found");
        }
        private void updatebtn_Click(object sender, EventArgs e)
        {
            DataRow drow = ds.Tables[0].Rows.Find(sno_txtbx.Text);
            if (drow!= null)
            {
                rno = ds.Tables[0].Rows.IndexOf(drow);
                ds.Tables[0].Rows[rno][0] = sno_txtbx.Text;
                ds.Tables[0].Rows[rno][1] = sname_txtbx.Text;
                ds.Tables[0].Rows[rno][2] = course_txtbx.Text;
                ds.Tables[0].Rows[rno][3] = fee_txtbx.Text;
File.Delete(fdir + drow[4]);
                phototask();
                ds.Tables[0].Rows[rno][4] = pname;
                ds.WriteXml(fpath);
                MessageBox.Show("record updated");
            }
            else
            MessageBox.Show("no record exists with this sno.");
        }
        private void deletebtn_Click(object sender, EventArgs e)
        {
            DataRow drow = ds.Tables[0].Rows.Find(sno_txtbx.Text);
            if (drow!= null)
            {
File.Delete(fdir + drow[4]);
                ds.Tables[0].Rows.Remove(drow);
                ds.WriteXml(openFileDialog1.FileName);
                MessageBox.Show("record deleted");
                rno = 0;
                showdata();
            }
            else
                MessageBox.Show("no record exists with this sno.");
        }
        private void firstbtn_Click(object sender, EventArgs e)
        {
            rno = 0;
            showdata();
        }
        private void prevbtn_Click(object sender, EventArgs e)
        {
            if (rno > 0)
            {
                rno--;
                showdata();
            }
            else
            { MessageBox.Show("first record"); }
        }
        private void nextbtn_Click(object sender, EventArgs e)
        {
            if (rno < ds.Tables[0].Rows.Count - 1)
            {
                rno++;
                showdata();
            }
            else
            { MessageBox.Show("LastRecord"); }
        }
        private void lastbtn_Click(object sender, EventArgs e)
        {
            rno = ds.Tables[0].Rows.Count - 1;
            showdata();
        }
        private void clearbtn_Click(object sender, EventArgs e)
        {
            sno_txtbx.Text = sname_txtbx.Text = course_txtbx.Text = fee_txtbx.Text = "";
            pictureBox1.Image = null;
        }
        private void exitbtn_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

Note:

i) In this application, we will search a record by taking input from the InputBox. For this we have to add reference to Microsoft.VisualBasic.

Adding a Reference:

Goto Project Menu->Add Reference -> select 'Microsoft.VisualBasic' from .NET tab.

In order to use this we have to include the namespace: 'using Microsoft.VisualBasic'

ii) xml file and respective jpeg images should be maintained in same folder.

Example for Creating an xml file:

Open notepad and type the following & save it with extension '.xml'

<students>
  <student>
    <sno>10</sno>
    <sname>Prashanth</sname>
    <course>dotnet</course>
    <fee>3500</fee>
    <photo>10)prash.jpg</photo>
  </student>
  <student>
    <sno>20</sno>
    <sname>Aravind</sname>
    <course>oracle</course>
    <fee>1000</fee>
    <photo>20)aravind.jpg</photo>
  </student>
  <student>
    <sno>30</sno>
    <sname>Satyapal</sname>
    <course>java</course>
    <fee>3000</fee>
    <photo>30)satya.jpg</photo>
  </student>
  <student>
    <sno>40</sno>
    <sname>Mahender</sname>
    <course>php</course>
    <fee>2500</fee>
    <photo>40)mahi.jpg</photo>
  </student>
</students>

Execution:

To execute application click loadxml button and select an xml file (a folder 'student data' consisting of the xml file is placed in 'xmlapp.zip' along with source code)

Another way of handling xml file:

Performing operations on xml file and saving changes, which includes creating xml elements(tags), assigning values, appending them to xml root element,...
(for this we have to include namespace 'using System.Xml')

Example to insert a record:

XmlDocument doc = new XmlDocument();
doc.Load(openFileDialog1.FileName);

XmlElement root = doc.CreateElement("student")
XmlElement sno = doc.CreateElement("sno");
XmlElement sname = doc.CreateElement("sname");
XmlElement course = doc.CreateElement("course");
XmlElement fee = doc.CreateElement("fee");
XmlElement photo = doc.CreateElement("photo");

sno.InnerText = sno_txtbx.Text;
sname.InnerText = sname_txtbx.Text;
course.InnerText = course_txtbx.Text;
fee.InnerText = fee_txtbx.Text;

phototask();//refer 'Code' for phototask()
photo.InnerText == pname;

root.AppendChild(sno);
root.AppendChild(sname);
root.AppendChild(course);
root.AppendChild(fee);
root.AppendChild(photo);

doc.DocumentElement.AppendChild(root);
doc.Save(fdir);
MessageBox.Show("record inserted"); 

Login to add your contents and source code to this article
share this article :
post comment
 

Excellent Example for learning XML with C#... Thanks a Lot....

Posted by Sachin Sachtechboy Mar 13, 2012

Thanks
~Ur's Prashanth.Chindam

Posted by Prashanth Chindam Nov 12, 2010

Faboulous.

Posted by Sudhindra BA Nov 12, 2010

Code for deleting a record including photo:

 private void deletebtn_Click(object sender, EventArgs e)
        {
           
            DataRow drow = ds.Tables[0].Rows.Find(sno_txtbx.Text);
            if (drow!= null)
            {
                File.Delete(fdir + drow[4]);//include namespace 'using System.IO'
                ds.Tables[0].Rows.Remove(drow);   
                ds.WriteXml(openFileDialog1.FileName);
                MessageBox.Show("record deleted");
                rno = 0;
                showdata();
            }
            else
                MessageBox.Show("no record exists with this sno.");
        }

---------------
Thanks for Ur Feedback
~ Ur's Prashanth.Chindam

Posted by Prashanth Chindam Oct 25, 2010

Hi friend,

Good to see your articles,but when i delete one record data is been deleted not the image which is stored in the folder.Is there any solution to do it.When i click on search button,and then a input box is displayed but here i decide not to search then i click cancel button so an error occurs.

Thanks

Posted by Satyapriya Nayak Oct 22, 2010
Nevron Gauge for SharePoint
Become a Sponsor
PREMIUM SPONSORS
  • ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications. Visit DynamicPDF here
    Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
6 Months Free & No Setup Fees ASP.NET Hosting!
Become a Sponsor