1
我使用XML文件來存儲和顯示ListBox上的內容。從列表框中刪除多個項目; XML中的更新
這是一個示例XML文件;
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
<Entry>
<Details>0</Details>
</Entry>
<Entry>
<Details>1</Details>
</Entry>
<Entry>
<Details>2</Details>
</Entry>
<Entry>
<Details>3</Details>
</Entry>
<Entry>
<Details>4</Details>
</Entry>
<Entry>
<Details>5</Details>
</Entry>
<Entry>
<Details>6</Details>
</Entry>
</Root>
用戶可以選擇ListBox上的值(選擇模式爲MultiExtended)並刪除它們。
我的問題是,最好是展示而不是解釋;
選定的項目 -
按下Del鍵後 - XML文件的
內容是相同的ListBox的。
當我選擇全部並按下刪除時,結果更奇怪。
我做錯了什麼?
如何獲取多個項目的索引並正確處理它們?
這裏是我的代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Windows.Forms;
namespace XML_ListBox
{
public partial class Form1 : Form
{
string path = "Test.xml";
public Form1()
{
InitializeComponent();
LoadFile();
}
private void LoadFile()
{
XDocument xdoc = XDocument.Load(path);
foreach (var el in xdoc.Root.Elements())
{
listBox1.Items.Add(el.Element("Details").Value);
}
}
private void OnDelete(object sender, KeyEventArgs e)
{
XElement root = XElement.Load(path);
if (e.KeyCode == Keys.Delete)
{
foreach (Object index in listBox1.SelectedIndices)
{
root.Elements("Entry").ElementAt((int)index).Remove();
listBox1.Items.RemoveAt((int)index);
}
root.Save(path);
}
}
}
}
謝謝:)它似乎現在正在工作。 你能解釋一下哪裏出了問題......即爲什麼演員需要? 該方法是否適用於大型XML文件? – vs2010noob
我已將解釋添加到答案中。 Cast <>不需要花錢,但它需要將Enumerable轉換爲Linq需要的可枚舉對象 –