【发布时间】:2018-05-10 09:02:08
【问题描述】:
我有一个数据网格视图,其中包含我想保存为 XML 文件的数据。我最近两周只使用 Windows 表单,所以我的经验有限。我已经设法保存了文件,但我想知道如何将其保存为如下示例所示的格式。如果有任何帮助,我将不胜感激
//This is what im getting
<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<itemstable>
<ProcessName>batchmnt.exe</ProcessName>
<ProcessPID>DDD</ProcessPID>
<ProcessFileName>mark</ProcessFileName>
<Operation>WriteFile</Operation>
<ProcessLength>3</ProcessLength>
<ProcessPath>mark</ProcessPath>
<ProcessKey>batchmnt.exe|DDD|mark|WriteFile</ProcessKey>
</itemstable>
<DocumentElement>
//This is what im looking for
<Msg Date ="" Time="">
<Layer Name="Core">
<SourceLayer Name="PMC">
<Message ProcessName=""
PID =""
FileName=""
Operation=""
Length=""
Path="">
</Message>
</Layer>
</Msg>
//And this is my code
private void SaveXML()
{
string filename = "";
SaveFileDialog sfd = new SaveFileDialog
{
Filter = "XML (*.xml)|*.xml",
FileName = ""
};
if (sfd.ShowDialog() == DialogResult.OK)
{
filename = sfd.FileName;
Deleteifexists(filename);
DataTable dt = new DataTable("itemstable");
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
dt.Columns.Add(dataGridView1.Columns[i].Name, typeof(System.String));
}
DataRow myrow;
int icols = dataGridView1.Columns.Count;
foreach (DataGridViewRow drow in this.dataGridView1.Rows)
{
myrow = dt.NewRow();
for (int i = 0; i <= icols - 1; i++)
{
myrow[i] = drow.Cells[i].Value;
}
dt.Rows.Add(myrow);
}
dt.WriteXml(filename);
}
}
【问题讨论】:
-
当前 xml 和预期 xml 之间没有相似之处。你希望 DataTable 怎么猜你想要什么?
-
OOP 方法来做到这一点 - 将创建对象的层次结构并使用 DataGrid 值填充它。然后是 XmlSerialize。
-
是的,我知道它们不是相似的输出。我希望得到像我展示的那样的输出,而不是当前的输出
-
设置DataColumn 属性。特别是
ColumnName、ColumnMapping。