我试图读取一个目录中存在的多个XML文件(每个XML只有一个记录)并在DataGridView中显示记录。如果任何XML文件使用新数据更新,我希望它的相应条目应该自动更新/刷新DataGridView中的新更新数据。做了一些搜索之后,我发现我可以使用FileSystemWatcher来查找是否有文件被更改,但任何人都可以帮助我如何使用它,我无法找到一个好例子。读取XML文件以在DataGridView中显示数据并自动更新UI(如果使用C来更改XML文件)#
我的XML文件看起来像(请注意,它没有根节点):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<info>
<id>001</id>
<name>xyz</name>
<salary>1000</salary>
<phone>1234567890</phone>
</info>
我的C#代码读取XML和填充GridView控件如下:
using System.Xml;
using System.IO;
namespace XML_Reader
{
public partial class Form1 : Form
{
string[] fileArray;
string directory_path = "C:\\Users\\XYZ\\Desktop\\test\\";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//Add columns to empty datagridview
dataGridView1.Columns.Add("id", "id");
dataGridView1.Columns.Add("name", "name");
dataGridView1.Columns.Add("salary", "salary");
dataGridView1.Columns.Add("phone", "phone");
populateRecords();
}
private void populateRecords()
{
DataSet ds;
DataGridViewRow dg_row;
//Read all XML files and records to datagrid
fileArray = Directory.GetFiles(directory_path, "MyFiles*.xml");
foreach (string xmlFile in fileArray_collection)
{
//Read the XML from the file
ds = new DataSet();
ds.ReadXml(xmlFile);
//create new row for datagrid
dg_row = (DataGridViewRow)dataGridView1.Rows[0].Clone();
//assign values to cells in the new row
dg_row.Cells[0].Value = ds.Tables["info"].Rows[0]["id"];
dg_row.Cells[1].Value = ds.Tables["info"].Rows[0]["name"];
dg_row.Cells[2].Value = ds.Tables["info"].Rows[0]["salary"];
dg_row.Cells[3].Value = ds.Tables["info"].Rows[0]["phone"];
//Add the new row to datagrid -- THE MOMENT RECORD IS DETECTED
dataGridView1.Rows.Add(dg_row);
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows.Count - 1;//This will keep the last added row visible with vertical scrollbar being at bottom.
}
}
}
}
试试这个https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx – 2015-02-09 06:02:41