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()。