我有一个包含7列的datagridview。这个datagridview没有连接到它的数据集。用户使用dataGridView.Rows.Add命令输入值...如何使用无数据集的Linq将DataGridView保存为XML
有可能将这些文件保存为XML(Linq)?
我有一个包含7列的datagridview。这个datagridview没有连接到它的数据集。用户使用dataGridView.Rows.Add命令输入值...如何使用无数据集的Linq将DataGridView保存为XML
有可能将这些文件保存为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());
}
}
有可能是这样做的几种方法。有没有什么具体的原因,你为什么不使用数据集?我的意思是你将如何连接到数据库?您可以使用其他技术,例如EF,但这取决于您真正想实现的目标。你能提供一些更详细的信息吗? – Lance
没有连接到数据库的只是一个带有列的网格。我没有得到它和一个适当的组件来执行此任务。 –
你使用的是WPF还是winforms?在WPF中,您始终可以将数据网格绑定到可观察集合,然后对其进行序列化。 http://stackoverflow.com/questions/8633398/xmlserialize-an-observablecollection – Lance