【问题标题】:Delete an added line and save it to XML删除添加的行并将其保存到 XML
【发布时间】:2017-07-05 07:56:02
【问题描述】:

我用 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>

我做错了什么以及解决方案是什么?

【问题讨论】:

    标签: c# xml winforms datagridview


    【解决方案1】:

    在 'SaveChanges' 方法中,您只更新现有密钥,因此现有密钥将保留,不会添加新密钥。在保存期间,您需要使用表中的数据完全重写 XML 文件。您还需要在使用 'doc.Save(...)' 进行更改后保存 'XmlDocument'。

    统一更新: 将“SaveChanges”方法更改为:

    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");
    

    【讨论】:

    • 感谢您的回复。我不知道我该怎么做,你能帮我举个例子或解决方案吗?原因是我是 C# 的初学者。
    • Tnx。我在回复中添加了“SaveChanges”方法的正确代码示例。
    • 为了更轻松地处理 Xml 文件,可以尝试XmlSerializer。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多