我在C#中创建了一个Windows窗体应用程序。使用此应用程序,我将XML文件加载到Datagridview中。该应用程序能够编辑,删除和添加行到XML文件。
我创建了第二个表单,我可以在其中添加键和值到我的XML文件中:
private void button1_Click(object sender, EventArgs e)
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(@"c:\users\khaab\documents\visual studio 2015\Projects\ReadingXML\test.xml");
XmlNode xNode = xDoc.CreateNode(XmlNodeType.Element, "add", "");
XmlAttribute xKey = xDoc.CreateAttribute("key");
XmlAttribute xValue = xDoc.CreateAttribute("value");
xKey.Value = KeyTextBox.Text;
xValue.Value = ValueTextBox.Text;
xNode.Attributes.Append(xKey);
xNode.Attributes.Append(xValue);
xDoc.GetElementsByTagName("appSettings")[0].InsertAfter(xNode,
xDoc.GetElementsByTagName("appSettings")[0].LastChild);
xDoc.Save(@"c:\users\khaab\documents\visual studio 2015\Projects\ReadingXML\test.xml");
this.Close();
}
在我添加这两行后,它将进入我的datagridview,但在我想删除它并尝试保存之后,该行不会从XML文件中删除。
保存功能:
private void SaveChanges()
{
XmlDocument doc = new XmlDocument();
doc.Load(@"c:\users\khaab\documents\visual studio 2015\Projects\ReadingXML\test.xml");
XmlNodeList nodes = doc.DocumentElement.SelectNodes("/configuration/appSettings/add");
//doc.RemoveAll();
foreach (var item in _settings)
{
for (int i = 0; i < nodes.Count; i++)
{
if (nodes[i].Attributes[0].Value.Equals(item.Key))
{
nodes[i].Attributes[1].Value = item.Value;
}
}
}
}
删除功能:
private void deleteRowToolStripMenuItem_Click(object sender, EventArgs e)
{
int rowIndex = dataGridView1.CurrentCell.RowIndex;
dataGridView1.ClearSelection();
dataGridView1.DataSource = null;
_settings.RemoveAt(rowIndex);
//dataGridView1.DataSource = _settings;
BindDataGrid();
}
XML文件:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="" value="" />
<add key="" value="" />
<add key="" value="" />
<add key="" value="" />
<add key="" value="" />
<add key="" value="" />
<add key="" value="" />
<add key="" value="" />
</appSettings>
</configuration>
我做错了什么,解决方案是什么?
答案 0 :(得分:0)
在&#39; SaveChanges &#39;方法只更新现有密钥,因此现有密钥将保留,并且不会添加新密钥。在保存期间,您需要使用表中的数据完全重写XML文件。您还需要保存&#39; XmlDocument &#39;更改后使用&#39; doc.Save(...)&#39;。
<强> UPD:强> 改变&#39; SaveChanges&#39;方法:
XmlDocument xDoc = new XmlDocument();
xDoc.Load(@"c:\users\khaab\documents\visual studio 2015\Projects\ReadingXML\test.xml");
var list = xDoc.DocumentElement["appSettings"];
list.RemoveAll();
foreach (var item in _settings)
{
XmlNode xNode = xDoc.CreateNode(XmlNodeType.Element, "add", "");
XmlAttribute xKey = xDoc.CreateAttribute("key");
XmlAttribute xValue = xDoc.CreateAttribute("value");
xKey.Value = item.Key;
xValue.Value = item.Value;
xNode.Attributes.Append(xKey);
xNode.Attributes.Append(xValue);
xDoc.GetElementsByTagName("appSettings")[0].InsertAfter(xNode, xDoc.GetElementsByTagName("appSettings")[0].LastChild);
}
xDoc.Save(@"c:\users\khaab\documents\visual studio 2015\Projects\ReadingXML\test.xml");