Reading, manipulating an Xml file using C#.Net(including images)   Leave a comment


Objective:

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

Design:

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);//saving photo on disk

}

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.

Inorder 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 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”);

 

Advertisements

Posted October 25, 2010 by PrashanthChindam in c#

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: