C# 将 DGV 数据填充为 XML 的数据集进行验证
C# Validate DataSet filled with DGV data as XML
我想制作一个 "Save as" 按钮,它将在将数据保存为 XML 文件之前使用 .xsd XML 模式验证来自 dataGridView 的数据。想法是将充满 DGV 数据的 DataTable 保存为 XML,用 .xsd 验证它,如果文件有效则删除它,但只要文件正在使用就不可能删除它。请帮忙
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog win = new SaveFileDialog();
win.InitialDirectory = "e:\";
win.Filter = "XML document (xml)|*.xml";
if (win.ShowDialog() == DialogResult.OK)
{
string file_name = win.FileName;
DataTable table = new DataTable();
table = (DataTable) dataGridView1.DataSource;
table.WriteXml(file_name);
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, "e:/katalog.xsd");
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);
XmlReader read = XmlReader.Create(file_name, settings);
do
{
read.Read();
}
while (!f);
if (!f)
{
File.Delete(file_name);
}
f = true;
}
}
static bool f = true;
static void ValidationEventHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Error: {0}", e.Message);
f = false;
break;
case XmlSeverityType.Warning:
Console.WriteLine("Warning {0}", e.Message);
f = false;
break;
}
}
如果问题是为什么无法删除文件,那是因为 XmlReader 已打开文件 - 在尝试删除文件之前调用 read.Close()。
我想制作一个 "Save as" 按钮,它将在将数据保存为 XML 文件之前使用 .xsd XML 模式验证来自 dataGridView 的数据。想法是将充满 DGV 数据的 DataTable 保存为 XML,用 .xsd 验证它,如果文件有效则删除它,但只要文件正在使用就不可能删除它。请帮忙
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog win = new SaveFileDialog();
win.InitialDirectory = "e:\";
win.Filter = "XML document (xml)|*.xml";
if (win.ShowDialog() == DialogResult.OK)
{
string file_name = win.FileName;
DataTable table = new DataTable();
table = (DataTable) dataGridView1.DataSource;
table.WriteXml(file_name);
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, "e:/katalog.xsd");
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);
XmlReader read = XmlReader.Create(file_name, settings);
do
{
read.Read();
}
while (!f);
if (!f)
{
File.Delete(file_name);
}
f = true;
}
}
static bool f = true;
static void ValidationEventHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Error: {0}", e.Message);
f = false;
break;
case XmlSeverityType.Warning:
Console.WriteLine("Warning {0}", e.Message);
f = false;
break;
}
}
如果问题是为什么无法删除文件,那是因为 XmlReader 已打开文件 - 在尝试删除文件之前调用 read.Close()。