如何保存DataGridView到XML使用Linq没有数据集

本文关键字:使用 XML Linq 数据集 DataGridView 何保存 保存 | 更新日期: 2023-09-27 18:09:06

我有一个7列的datagridview。这个datagridview没有连接到它的数据集。用户使用dataGridView.Rows.Add命令输入值…

是否有可能将这些文件保存为XML (Linq)?

如何保存DataGridView到XML使用Linq没有数据集

我创建了

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        const string FILENAME = @"c:'temp'test.xml";
        public Form1()
        {
            InitializeComponent();
            DataTable dt = new DataTable();
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Age", typeof(int));
            dt.Rows.Add(new object[] { "John", 25 });
            dt.Rows.Add(new object[] { "Mary", 26 });
            dt.Rows.Add(new object[] { "Bill", 27 });
            dt.Rows.Add(new object[] { "Beth", 28 });
            dataGridView1.DataSource = dt;
            //reverse
            DataTable dt2 = new DataTable("NewTable");
            foreach (DataGridViewColumn column in  dataGridView1.Columns)
            {
                dt2.Columns.Add(column.Name, column.ValueType);
            }
            //don't save last row of dattagridview which is the blank editable row
            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {
                DataGridViewRow row = dataGridView1.Rows[i];
                DataRow newRow = dt2.Rows.Add();
                for (int j = 0; j < row.Cells.Count; j++)
                {
                    newRow[j] = row.Cells[j].Value;
                }
            }
            dt2.WriteXml(FILENAME, XmlWriteMode.WriteSchema);
        }
    }
}

从一个数据表中创建一个datagridview。然后从DGV中反向创建数据表并保存到文件

另一个解决方案:

void SaveData() {
        XDocument xmlDocument = new XDocument(new XElement("Grid"));
        foreach(DataGridViewRow row in dataGridView1.Rows)
        xmlDocument.Root.Add(
            new XElement("Grid",
                new XAttribute("xxx1", row.Cells[0].Value.ToString()),
                new XAttribute("xxx2", row.Cells[1].Value.ToString()),
                new XAttribute("xxx3", row.Cells[2].Value.ToString()),
                new XAttribute("xxx4", row.Cells[3].Value.ToString()),
                new XAttribute("xxx5", row.Cells[4].Value.ToString()),
                new XAttribute("xxx6", row.Cells[5].Value.ToString()),
                new XAttribute("xxx7", row.Cells[6].Value.ToString())));
        xmlDocument.Save("@Path");
    }
    void LoadData() {
        try {
            XDocument xmlDocument = XDocument.Load("@Path");
            foreach(XElement el in xmlDocument.Root.Elements()) {
                switch(el.Name.LocalName) {
                    case "Grid":
                        dataGridView1.Rows.Add(el.Attribute("xxx1").Value,el.Attribute("xxx2").Value,
                            el.Attribute("xxx3").Value,el.Attribute("xxx4").Value,el.Attribute("xxx5").Value,
                            el.Attribute("xxx6").Value,el.Attribute("xxx7").Value);
                        break;
                }
            }
        } catch(Exception ex) {
            MessageBox.Show(ex.ToString());
        }
    }