簡體   English   中英

LINQ to XML和DataGridView

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM