View XML Files Easily with XmlGridViewControl






2.53/5 (6 votes)
A .NET control that displays XML files as XML or in a grid control.
Introduction
The XmlGridViewControl
is a .NET control for Windows Forms that displays an XML file in either a beautified XML format (via the WebBrowser
control) or in a DataGrid
. When set to display in the DataGrid
, the index (zero-based) of the DataTable
of the XML file/DataSet
can be changed to quickly display a specific DataTable
in the XML DataSet
.
Using the XmlGridViewControl .NET Control
To use the XmlGridViewControl
in a Windows Form or another Windows .NET control, drop an instance of the XmlGridViewControl
control on the form and then just set the following properties in your form/control class:
// display the XML file in a datagrid
xmlGridView.ViewMode = XmlGridView.VIEW_MODE.TABLE;
xmlGridView.DataSetTableIndex = 0;
xmlGridView.DataFilePath = "c:\\temp\SampleFile.xml";
//OR
// display the XML file in XML mode
xmlGridView.ViewMode = XmlGridView.VIEW_MODE.XML;
xmlGridView.DataFilePath = "c:\\temp\SampleFile.xml";
Below is a demonstration of some of the different views in the XmlGridViewControl
sample:
How the XmlGridViewControl Works
The XmlGridViewControl
control is basically just an instance of a DataGrid control and a WebBrowser control, and the ViewMode
property determines which control is displayed (while the other is hidden). The DataFilePath
property points to the XML file which is loaded and displayed, and the DataSetTableIndex
determines which DataTable
to display when in the TABLE
mode, and the DataSet
contains multiple DataTables
s.
public partial class XmlGridView : UserControl
{
private bool m_bGridViewModeReadError = false;
public enum VIEW_MODE {XML, TABLE}
public VIEW_MODE ViewMode
{
get
{
return (webXmlView.Visible ? VIEW_MODE.XML : VIEW_MODE.TABLE);
}
set
{
SetViewMode(value);
}
}
private string m_sDataFilePath = string.Empty;
public string DataFilePath
{
get
{
return m_sDataFilePath;
}
set
{
m_sDataFilePath = value;
LoadDataFile();
}
}
private int m_nDataSetTableIndex = 0;
public int DataSetTableIndex
{
get
{
return m_nDataSetTableIndex;
}
set
{
SetDataSetTableIndex(value);
}
}
private int m_nDataTableCount = 0;
public int DataTableCount
{
get { return m_nDataTableCount; }
}
public XmlGridView()
{
InitializeComponent();
SetViewMode(VIEW_MODE.XML);
}
private void SetViewMode(VIEW_MODE mode)
{
if (m_bGridViewModeReadError == true)
{
mode = VIEW_MODE.XML;
}
if(mode == VIEW_MODE.XML)
{
webXmlView.Visible = true;
grdTableView.Visible = false;
}
else
{
webXmlView.Visible = false;
grdTableView.Visible = true;
}
}
private void LoadDataFile()
{
m_bGridViewModeReadError = false;
// use the webbrowser control to automatically parse the file
webXmlView.Navigate(m_sDataFilePath);
if ((m_sDataFilePath != string.Empty) && (File.Exists(m_sDataFilePath) == true))
{
// Creates a DataSet and loads it with the xml content
try
{
DataSet dsXmlFile = new DataSet();
dsXmlFile.ReadXml(m_sDataFilePath, XmlReadMode.Auto);
m_nDataTableCount = dsXmlFile.Tables.Count;
grdTableView.DataSource = dsXmlFile.Tables[DataSetTableIndex];
}
catch
{
m_bGridViewModeReadError = true;
m_nDataTableCount = 0;
webXmlView.Navigate(m_sDataFilePath);
SetViewMode(VIEW_MODE.XML);
}
}
else
{
grdTableView.DataSource = null;
}
}
private void SetDataSetTableIndex(int nTableIndex)
{
if (nTableIndex >= m_nDataTableCount)
return;
m_nDataSetTableIndex = nTableIndex;
LoadDataFile();
}
}
Conclusion
I hope you find this article and control useful - it's proved to be an invaluable resource when examining large or complicated XML files. Enjoy!
Updates
November 28, 2006
The control has been updated to include a DataTableCount
property which represents the number of DataTable
s in the DataSet
/XML file. The sample application has also been updated to use a ComboBox
to select the current DataTable
index from, instead of a TextBox
.