问题描述:
我有一个DataGrid。它由List填充。代码如下:
List<SomeClass> someClassList = new List<SomeClass>();
//Fill somClassList with data (omited for brevity)
myDataGrid.ItemsSource = someClassList;
这有效,所有值都正确显示。用户现在可以编辑所有单元格并创建新行。用户单击某个按钮后,我想将该DataGrid中的值保存到具有以下结构的XML 文件中:
<Root>
<a>
<b>val1</b>
<c>val2</c>
<d>
<e>
<f>val3</f>
<g>val4</g>
<h>val5</h>
<i>val6</i>
</e>
<!--variable number of 'e'- tags with inner structure as above-->
</d>
</a>
<!--variable number of 'a'-tags with inner structure as above-->
</Root>
出于这个原因,我决定逐行遍历 DataGrid会很聪明。因此 Button-Click-event-Handler 包含执行迭代的代码(每个值都由 WriteLine() 方法复制):
foreach (SomeClass someClassElement in myDataGrid.ItemsSource)
{
Trace.WriteLine(someClassElement.b+ ", " + someClassElement.c+ ", " +
someClassElement.f + ", " + someClassElement.g + ", " +
someClassElement.h + ", " + someClassElement.i);
}
我现在必须将每一行写入一个XML 文件。不幸的是,这似乎不是一项简单的任务,因为有两个内部标签的出现次数可变。
到目前为止,我得到的是以下代码,它从我为清楚起见添加的示例 DataGrid生成同样附加的XML 文件。
//Button click code
XmlDocument doc = new XmlDocument();
XmlNode myRoot = doc.CreateElement("Root");
XmlNode a,b,c,d,e;
String last_b_value = "0";
foreach (SomeClass someClassElement in myDataGrid.ItemsSource)
{
String current_b_value = someClassElement.b;
if (last_b_value != current_b_value)
{
//Creating XML-elements and setting text
a = doc.CreateElement("a");
b = doc.CreateElement("b");
b.InnerText = someClassElement.b;
c = doc.CreateElement("c");
c.InnerText = someClassElement.c;
d = doc.CreateElement("d");
e = doc.CreateElement("e");
a.AppendChild(b);
a.AppendChild(c);
a.AppendChild(d);
d.AppendChild(e);
}
}
doc.AppendChild(myRoot);
// Save document
string filename = dlg.FileName;
doc.Save(@filename);
这是输出的 XML 文件:
<root>
<a>
<b>val_1_1</b>
<c>val_1_2</c>
<d>
<e />
<!-- the varying number of 'e'-tags is not created correctly -->
</d>
</a>
<a>
<b>val_2_1</b>
<c>val_2_2</c>
<d>
<e />
<!-- the varying number of 'e'-tags is not created correctly -->
</d>
</a>
<a>
<b>val_3_1</b>
<c>val_3_2</c>
<d>
<e />
<!-- the varying number of 'e'-tags is not created correctly -->
</d>
</a>
<!-- number of varying 'a'-tags is created correctly -->
</root>
这是示例-用户单击按钮后从中创建 XML 文件的DataGrid :
该代码确实适当地处理了可变数量的“a”标签,但缺乏在每个“a”标签内写入同样数量的“e ”标签的功能。
相反,输出XML 文件应如下所示:
<Root>
<a>
<b>val_1_1</b>
<c>val_1_2</c>
<d>
<e>
<f>x1</f>
<g>x1</g>
<h>x1</h>
<i>x1</i>
</e>
<e>
<f>x2</f>
<g>x2</g>
<h>x2</h>
<i>x2</i>
</e>
<e>
<f>x3</f>
<g>x3</g>
<h>x3</h>
<i>x3</i>
</e>
</d>
</a>
<a>
<b>val_2_1</b>
<c>val_2_2</c>
<d>
<e>
<f>x4</f>
<g>x4</g>
<h>x4</h>
<i>x4</i>
</e>
<e>
<f>x5</f>
<g>x5</g>
<h>x5</h>
<i>x5</i>
</e>
</d>
</a>
<a>
<b>val_3_1</b>
<c>val_3_2</c>
<d>
<e>
<f>x6</f>
<g>x6</g>
<h>x6</h>
<i>x6</i>
</e>
</d>
</a>
</Root>
问题:
- 如何调整代码以创建缺少的“e”标签?
- 是否有更智能的方法来读取DataGrid并将其值保存到相同的结构化 XML 文件中?