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"); }