请帮我将DataGrid导出为XML。 我尝试了两种方法,但都导致抛出异常。将Datagrid导出为xml
DataTable dt = (DataTable)dataGrid2.DataSource;
dt.WriteXml("t.xml", XmlWriteMode.IgnoreSchema);
该投用消息一个InvalidOperationException“无法序列的数据表。数据表名称未设置。”
请推荐一种合适的方法将数据网格导出为XML。
请帮我将DataGrid导出为XML。 我尝试了两种方法,但都导致抛出异常。将Datagrid导出为xml
DataTable dt = (DataTable)dataGrid2.DataSource;
dt.WriteXml("t.xml", XmlWriteMode.IgnoreSchema);
该投用消息一个InvalidOperationException“无法序列的数据表。数据表名称未设置。”
请推荐一种合适的方法将数据网格导出为XML。
Here's a link以Marc的建议为例。
向下滚动到示例的SerializeToXML和DeserializeFromXML方法。
鉴于该错误;只需设置DataTable的名称?
dt.TableName = "Fred";
...
就个人而言,我会使用对象序列化(或许XmlSerializer
超过List<T>
),但DataTable
应该没事......
更新;例如使用DataTable.WriteXml
/ReadXml
;注意“这条线使它工作”评论;这是必要的a:能够写入,b:正确读取行。
using System;
using System.Data;
static class Program
{
static void Main()
{
DataTable table = CreateEmptyTable();
table.Rows.Add(1, "abc");
table.Rows.Add(2, "def");
WriteTable(table);
table.WriteXml("t.xml", XmlWriteMode.IgnoreSchema);
DataTable clone = CreateEmptyTable();
clone.ReadXml("t.xml");
WriteTable(clone);
}
static DataTable CreateEmptyTable()
{
DataTable table = new DataTable();
table.Columns.Add("Foo", typeof(int));
table.Columns.Add("Bar", typeof(string));
table.TableName = "MyTable"; // THIS LINE MAKES IT ALL WORK
return table;
}
static void WriteTable(DataTable table) {
foreach (DataColumn col in table.Columns)
{
Console.Write(col.ColumnName);
Console.Write('\t');
}
Console.WriteLine();
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
Console.Write(row[col]);
Console.Write('\t');
}
Console.WriteLine();
}
}
}
这是行不通的再次相同的错误 如何序列u能详细解释 – Arunachalam 2009-02-27 04:51:15
这个答案是特定于C#中的winforms,但一般应用于ASP.NET编程。下面,_dtResults是一个全局数据表。早些时候,当您将DataGrid(dg)源绑定到DataTable时,只需将副本放入全局变量_dtResults即可。然后致电ExportXMLFromDG()
。
// user clicks on button, which binds the dg to the datatable,
// prompts the user to save the XML, serializes it and saves the file.
private void toolStripButton4_Click(object sender, EventArgs e)
{
dg.DataSource = dtResults; // this actually happens earlier.
_dtResults = dtResults; // this actually happens earlier.
if (dg.Columns.Count > 0)
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.RestoreDirectory = true;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
ExportXMLFromDG(saveFileDialog1.FileName);
}
}
}
private void ExportXMLFromDG(string xml_file)
{
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
TextWriter textWriter = new StreamWriter(xml_file);
serializer.Serialize(textWriter, _dtResults);
textWriter.Close();
}
新增更新再评论 – 2009-02-27 07:27:04