2017-02-16 8 views
1

C#でWindowsフォームアプリケーションを作成しました。このアプリケーションでは、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になります。この2行を追加していた後、それを保存しようとすると、行は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ファイルをテーブルのデータで完全に書き換える必要があります。また、 'doc.Save(...)'を使用して変更した後、 'XmlDocument'を保存する必要があります。

UPD:これに 変更] 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"); 
+0

はご回答いただきありがとうございます。私はそれをどうやって行うことができるか考えていません。その事例や解決策を使って私を助けてくれますか?理由は、私はC#の初心者です。 –

+0

XMLファイルの内容を教えてください。 –

+0

投稿をXMLファイルの内容で更新しました。 –

関連する問題