gpt4 book ai didi

c# - LINQ to XML 和 DataGridView

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:54 24 4
gpt4 key购买 nike

您好,我是第一次尝试通过 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 都会更改,所以我想我已经接近了!

最佳答案

也许您可以尝试使用 session 中保存的 xmlDoc(因此与回发一起保存)...将三个元素(从文本框)添加到 XmlDoc...并在每次回发时将 gridview 重新绑定(bind)到 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");
}

关于c# - LINQ to XML 和 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4023090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com