[英]LINQ to XML and DataGridView
嗨,我正在嘗試通過LINQ第一次使用DataGridView。
這是我要嘗試的操作:我想使用它(盡管不必使用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文件:
<?xml version="1.0" encoding="utf-8" ?>
<Queues>
<Queue>
<Number>
001
</Number>
<Name>
mytest
</Name>
<QueueTag>
xyz
</QueueTag>
</Queue>
<Queue>
<Number>
002
</Number>
<Name>
Adi2
</Name>
<QueueTag>
ABCD
</QueueTag>
</Queue>
</Queues>
好的,我現在將代碼更改為此:
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<Queue>(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");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.