我有一个包含7列的datagridview。此datagridview没有连接到它的数据集。用户使用dataGridView.Rows.Add命令输入值...
有可能将这些文件保存到XML(Linq)吗?
答案 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());
}
}