C# LINQ到XML和DataGridView
嗨,我第一次尝试使用DataGridView,并且使用LINQ 以下是我想做的: 我想使用它(尽管它不必使用DataGridView)来读取和显示XML文件的内容(下面的代码是工作代码),但我想在表单上或DataGridView中有一个add row按钮,它接收三个文本框的内容,并填充新行三列的内容。新行将附加到现有数据 接下来,我想添加一个删除按钮来删除当前选中的行 最后,我需要一个保存按钮,将DataGridView的内容导出回一个XML文件,覆盖/更新现有的XML文件 所以我坚持添加额外的数据!但由于我目前对删除或保存都没有任何线索,我想我会一次问完所有问题 这是我必须读取xml文件的代码:C# LINQ到XML和DataGridView,c#,winforms,datagridview,linq-to-xml,.net-4.0,C#,Winforms,Datagridview,Linq To Xml,.net 4.0,嗨,我第一次尝试使用DataGridView,并且使用LINQ 以下是我想做的: 我想使用它(尽管它不必使用DataGridView)来读取和显示XML文件的内容(下面的代码是工作代码),但我想在表单上或DataGridView中有一个add row按钮,它接收三个文本框的内容,并填充新行三列的内容。新行将附加到现有数据 接下来,我想添加一个删除按钮来删除当前选中的行 最后,我需要一个保存按钮,将DataGridView的内容导出回一个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>
001
我的测试
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<Queue>(q.ToList());
bindingSource1.DataSource = queryAsList;
dataGridView1.DataSource = bindingSource1;
xdocumentxmldoc=XDocument.Load(@“queues.xml”);
var q=来自xmlDoc.Root.substands(“队列”)中的c
选择新队列
{
编号=c.元素(“编号”).值,
名称=c.元素(“名称”).值,
QueueTag=c.Element(“QueueTag”).Value
};
var queryAsList=newbindingslist(q.ToList());
bindingSource1.DataSource=查询列表;
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");
}