2017-02-16 2 views
1

Я создал приложение Windows Form в C#. С помощью этого приложения я загружаю XML-файл в Datagridview. Это приложение может редактировать, удалять и добавлять строки в файл XML.Удалить добавленную строку и сохранить ее в 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

В режиме 'SaveChanges' вы только обновляете существующие ключи, поэтому существующие ключи остаются и новые ключи не будут добавлены. Во время сохранения вам нужно полностью переписать XML-файл с данными из таблицы. Также вам нужно сохранить 'XmlDocument' после изменения с помощью 'doc.Save (...)'. Метод Изменить 'SaveChanges' к этому::

UPD

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

Спасибо за ваш ответ. У меня нет идеи, как я могу это сделать, можете ли вы помочь мне с этим примером или решением? Причина в том, что я новичок в C#. –

+0

Пожалуйста, покажите мне содержимое вашего XML-файла. –

+0

Я обновил сообщение с содержимым файла XML. –

Смежные вопросы