Introduction
Sometimes, we need to read huge amounts of data
from XML and need to be displayed on the page. Here we can do this in many ways
but in this example I will explain how to read XML data via DataTable in
ASP.NET. You just need to use one method of DataTable called ReadXML. This tip
will explain how to use the XML structure with the same.
Background
Before reading
the XML Data (Country.xml) on DataTable we need to make sure that the table
structure is consistent with xml. For processing this first create the XML data
file & then create the ReadXML.aspx application for opening XML.
Here we are taking a Dropdown list & Grid View –
As the dropdown is used for filtering the state. And grid view is used for
presenting the data read from the country.xml file using datatable and the code
is been mentioned in below:
Using the code
ReadXML.aspx
<p>
<asp:Label ID="lblState" runat="server" Text="Filter by state:" />
<asp:DropDownList ID="ddlState" runat="server"
AutoPostBack="true" AppendDataBoundItems="True"
OnSelectedIndexChanged="ddlState_SelectedIndexChanged">
<asp:ListItem Selected="True" Value="All States">- All States -</asp:ListItem>
</asp:DropDownList>
</p>
<asp:GridView ID="grvForm" runat="server"
ClientIDMode="Static" CellPadding="4"
ForeColor="#333333" GridLines="None">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#E9E7E2" />
<SortedAscendingHeaderStyle BackColor="#506C8C" />
<SortedDescendingCellStyle BackColor="#FFFDF8" />
<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
</asp:GridView>
<asp:Label ID="lblErr" runat="server" />
ReadXML.aspx.cs
using System;
using System.Web.UI.WebControls;
using System.Data;
using System.Collections.Generic;
public partial class ReadXML : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GenerateData("All States");
}
}
private void GenerateData(string p)
{
string path = Server.MapPath("~/Country.xml");
DataTable dt = new DataTable("rootStateIndividual");
try
{
dt.Columns.Add("State", typeof(System.String));
dt.Columns.Add("Capital", typeof(System.String));
dt.Columns.Add("Description", typeof(System.String));
dt.ReadXml(path);
if (!String.IsNullOrEmpty(p) && p != "All States")
{
List<datatState> ar = new List<datatState>();
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i]["State"].ToString() == p)
{
ar.Add(new datatState() { State = dt.Rows[i]["State"].ToString(),
Capital = dt.Rows[i]["Capital"].ToString(),
Description = dt.Rows[i]["Description"].ToString() });
}
}
}
dt.Clear();
DataRow dr;
foreach (var item in ar)
{
dr = dt.NewRow();
dr["State"] = item.State;
dr["Capital"] = item.Capital;
dr["Description"] = item.Description;
dt.Rows.Add(dr);
}
dt.Columns["State"].ColumnName = "State";
dt.Columns["Capital"].ColumnName = "Capital";
dt.Columns["Description"].ColumnName = "Description";
grvForm.DataSource = dt;
grvForm.DataBind();
}
else
{
DataTable dtState = new DataTable("rootStateIndividual");
dtState.Columns.Add("State", typeof(System.String));
dtState.ReadXml(path);
DataView dView = new DataView(dtState);
string[] arrColumns = { "State" };
ddlState.DataSource = dView.ToTable(true, arrColumns);
ddlState.DataValueField = "State";
ddlState.DataBind();
dt.Columns["State"].ColumnName = "State";
dt.Columns["Capital"].ColumnName = "Capital";
dt.Columns["Description"].ColumnName = "Description";
grvForm.DataSource = dt;
grvForm.DataBind();
}
foreach (GridViewRow row in grvForm.Rows)
{
row.Cells[0].CssClass = "col1";
row.Cells[1].CssClass = "col2";
row.Cells[2].CssClass = "col3";
}
}
catch (Exception ex)
{
lblErr.Text = ex.ToString();
}
}
protected void ddlState_SelectedIndexChanged(object sender, EventArgs e)
{
GenerateData(ddlState.SelectedValue);
}
}
public class datatState
{
public string State;
public string Capital;
public string Description;
}
Country.xml
file consists of:
<Country>
<rootStateIndividual>
<State></State>
<Capital></Capital>
<Description></Description>
</rootStateIndividual>
</Country>
Output
Default view -
Selected Dropdown Value View -