LINQ to XML和DataGridView

嗨,我第一次尝试使用DataGridView和LINQ。

这是我正在尝试做的事情:我想使用它(虽然它没有DataGridView)来读取和显示XML文件的内容(这个位在下面是工作代码)但是我想要添加一个表单或DataGridView中的行按钮,它获取三个文本框的内容,并填充新行的三列的内容。 新行将附加到现有数据。

接下来,我想添加一个删除按钮来删除当前选定的行。

最后,我想要一个保存按钮,将DataGridView的内容导出回XML文件,覆盖/更新现有的XML文件。

所以我坚持添加额外的数据! 但由于我目前没有关于删除或保存的线索,我想我会一气呵成!

所以这是我必须阅读xml文件的代码:

XDocument xmlDoc = XDocument.Load(@"queues.xml"); var q = from c in xmlDoc.Root.Descendants("Queue") select new { QueueNumber = c.Element("Number").Value, QueueName = c.Element("Name").Value, QueuePCC = c.Element("QueueTag").Value }; dataGridView1.DataSource = q.ToList(); 

XML文档:

     001   mytest   xyz     002   Adi2   ABCD    

好的,我现在已将代码更改为:

 XDocument xmlDoc = XDocument.Load(@"queues.xml"); var q = from c in xmlDoc.Root.Descendants("Queue") select new Queue { Number = c.Element("Number").Value, Name = c.Element("Name").Value, QueueTag= c.Element("QueueTag").Value }; var queryAsList = new BindingList(q.ToList()); bindingSource1.DataSource = queryAsList; dataGridView1.DataSource = bindingSource1; 

这允许我从dataGridView添加和删除行和数据:)

但我仍然无法从dataGridView或bindingSource1中将数据写回XML 🙁

有什么帮助吗? 每次我对数据进行更改时,bindingSource1.count都会更改,所以我觉得我很接近!

也许您可以尝试使用保存在会话中的xmlDoc(因此使用回发保留)…将三个元素(从文本框中)添加到XmlDoc …并在每次回发时将gridview重新绑定到xmlDoc。

最后,你可以做xmlDoc.save()。

要删除行,可以使用GridView事件dataGridView1_RowDeleted来编辑xmlDoc(以删除相对于所选行的节点)。

就像是:

 protected void ButtonLoadGridView_Click(object sender, EventArgs e) { XDocument xmlDoc = XDocument.Load(@"f:\queues.xml"); var q = from c in xmlDoc.Root.Descendants("Queue") select new { QueueNumber = c.Element("Number").Value, QueueName = c.Element("Name").Value, QueuePCC = c.Element("QueueTag").Value }; dataGridView1.DataSource = q.ToList(); Session.Add("xmlDoc",xmlDoc); } public void dataGridView1_RowDeleting(Object sender, GridViewDeleteEventArgs e) { // get some node information: int rowIndex = e.RowIndex; string someNodeInfo = dataGridView1.Rows[rowIndex].Cells[0].Text; // then edit xml : XmlDocument xmlDoc = (XmlDocument) Session["xmlDoc"]; xmlDoc.ChildNodes.Item(rowIndex).RemoveAll(); Session.Add("xmlDoc", xmlDoc); } protected void ButtonSave_Click(object sender, EventArgs e) { XmlDocument xmlDoc = (XmlDocument)Session["xmlDoc"]; xmlDoc.Save(@"f:\queues2.xml"); }