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

时间:2016-09-26 18:30:45

标签: c# xml linq dataset

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

有可能将这些文件保存到XML(Linq)吗?

2 个答案:

答案 0 :(得分:1)

我创建了

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创建数据表并保存到文件中。

答案 1 :(得分:0)

另一种解决方案:

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());
        }
    }