我有TreeView
包含节点,点击其中一个后,数据从文件加载并填充TextBoxes
等。我想阻止创建重复项,所以每次textBox“title”包含已存在于.xml文件中的条目,它将被删除。
我的问题是,在第一次点击添加条目的按钮后,一切正常。但是在第二次单击(textBox.Text
值未更改,因此它将是重复的)节点消失后,即使我修改它。每次双击后,都会添加treeView中的新子节点。我试图自己做,但我没有想法。
按钮代码:
private void button1_Click(object sender, EventArgs e)
{
XDocument doc = XDocument.Load("test.xml");
bool ifDuplicate = doc.Descendants("dog")
.Any(x => (string)x.Attribute("name") == textBox1.Text);
if (ifDuplicate == true)
{
var xElement = (from q in doc.Elements("dogs").Elements("dog")
where q.Attribute("name").Value == textBox1.Text
select q);
foreach (var a in xElement)
a.Remove();
doc.Save("test.xml");
return;
}
gender(); //determines in which root node this entry will appear as child node; just comboBox with few exceptions
TreeViewOperations.SaveTree(treeView1, "test2.xml"); //saving treeView1
Save("test.xml"); //saving file that contains data form textBoxes etc.
statusBarUpdate();
}
所以我的问题是:有没有更好的方法来修改现有节点和删除重复项?如果需要,也可以附加Load方法。
编辑:保存方法
private void Save(string filename) { XDocument database = XDocument.Load(filename); XElement dog = new XElement("dog"); database.Element("dogs").Add(dog); dog.Add(new XAttribute("name", textBox1.Text)); dog.Add(new XElement("breed", comboBox3.Text)); dog.Add(new XElement("sex", radioButton3.Checked)); database.Save(filename); }
答案 0 :(得分:1)
我认为您的问题来自return
块中的if (ifDuplicate)
,因为它会阻止该方法添加新项目。
以下是我将使用的解决方案:
private void button1_Click(object sender, EventArgs e)
{
XDocument doc = XDocument.Load("test.xml");
// Removes all existing elements
foreach (XElement xElement in from q in doc.Elements("dogs").Elements("dog")
where q.Attribute("name").Value == textBox1.Text
select q)
xElement.Remove();
gender(); //determines in which root node this entry will appear as child node; just comboBox with few exceptions
TreeViewOperations.SaveTree(treeView1, "test2.xml"); //saving treeView1
Save("test.xml"); //saving file that contains data form textBoxes etc.
statusBarUpdate();
}