Introduction
This document covers how to populate a DataGridView from XML and how to save DataGridView values back to XML.
Steps to configure.
Open Visual Studio and create a new Windows application.
![PICS1.gif]()
Add a DataGridView to the form.
Create a XML file in your local drive (Say D:\ drive) with the following code.
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Table1>
<Server>Server1</Server>
<Database>Database1</Database>
</Table1>
<Table1>
<Server>Server2</Server>
<Database>Database2</Database>
</Table1>
<Table1>
<Server>Server3</Server>
<Database>Database3</Database>
</Table1>
</NewDataSet>
Add the following code in the form load event.
//Populating databases value in dropdown
XmlDocument XMLDoc = new XmlDocument();
XMLDoc.Load(path);
//Give Node name here
XmlNodeList nodelist = XMLDoc.SelectNodes("NewDataSet/Table1");
foreach(XmlNode node in nodelist){
comboBox1.Items.Add(node.SelectSingleNode("Database").InnerText);
}
Add a button "Add" below the DataGridView as shown below.
Add the following code in the button click event.
private void button1_Click(object sender, EventArgs e)
{
//path of XML file
string path = "D:\\Santhosh\\XMLFile1.xml";
DataSet ds = new DataSet();
DataTable dt = new DataTable();
//Adding columns to datatable
foreach (DataGridViewColumn col in dataGridView1.Columns)
{
dt.Columns.Add(col.DataPropertyName, col.ValueType);
}
//adding new rows
foreach (DataGridViewRow row in dataGridView1.Rows)
{
DataRow row1 = dt.NewRow();
for (int i = 0; i < dataGridView1.ColumnCount; i++)
//if value exists add that value else add Null for that field
row1[i] = (row.Cells[i].Value == null ? DBNull.Value : row.Cells[i].Value);
dt.Rows.Add(row1);
}
//Copying from datatable to dataset
ds.Tables.Add(dt);
//writing new values to XML
ds.WriteXml(path);
MessageBox.Show("Successfully added ", "Success");
this.Close()
}
Run the solution. The following form should be displayed.
Now enter the new values into the DataGridView and click Add. Check that the values are being added.
![PICS8.gif]()
Now check the new value is being added in the XML file.
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Table1>
<Server>Server1</Server>
<Database>Database1</Database>
</Table1>
<Table1>
<Server>Server2</Server>
<Database>Database2</Database>
</Table1>
<Table1>
<Server>Server3</Server>
<Database>Database3</Database>
</Table1>
</NewDataSet>
Using the above concept to create a connection string from XML:
This can be used to configure a connection string at run time from XML. So the user can add his server name and database at XML and create connections at run time.
Now add a dropdown and a button above the DataGridView as shown below. Add the following code in the form load event to populate the databases in the dropdown as below.
/Populating databases value in dropdown
XmlDocument XMLDoc = new XmlDocument();
XMLDoc.Load(path);
//Give Node name here
XmlNodeList nodelist = XMLDoc.SelectNodes("NewDataSet/Table1");
foreach(XmlNode node in nodelist){
comboBox1.Items.Add(node.SelectSingleNode("Database").InnerText);
}
![PICS91.gif]()
![PICS91.gif]()
Now add the following code to fetch the server name on selecting the database in the dropdown and click on Connect.
private void button2_Click(object sender, EventArgs e)
{
string path = "D:\\Santhosh\\XMLFile1.xml";
string server="";
XmlDocument XMLDoc = new XmlDocument();
XMLDoc.Load(path);
//Give Node name here
XmlNodeList nodelist = XMLDoc.SelectNodes("NewDataSet/Table1");
foreach (XmlNode node in nodelist)
{
if ((node.SelectSingleNode("Database").InnerText) == comboBox1.SelectedItem.ToString())
{
server = node.SelectSingleNode("Server").InnerText;
}
}
}
Now using the database and server, create a new SqlConnection as usual.
Conclusion
By using the above code, the user can populate a DataGridView from XML and again save back the new values to the XML file. This will be very useful in creating a connection string also.