到目前为止学习LINQ已经非常有趣,但尽管阅读了一些书籍和一些关于该主题的在线资源,但我仍然觉得总共的n00b。最近,我刚刚了解到,如果我的查询返回Anonymous类型,则我正在填充的DataGridView将为ReadOnly(因为显然匿名类型是ReadOnly。)数据绑定问题:DataGridView <=> XDocument(使用LINQ到XML)
现在,我试图找出最简单的方法于:
- 获取数据从一个XML文件中的一个子集到一个DataGridView,
- 允许用户编辑所述数据,
- 棒更改过的数据返回到XML文件。
到目前为止,我有步骤1和2想通了:
public class Container
{
public string Id { get; set; }
public string Barcode { get; set; }
public float Quantity { get; set; }
}
// For use with the Distinct() operator
public class ContainerComparer : IEqualityComparer<Container>
{
public bool Equals(Container x, Container y)
{
return x.Id == y.Id;
}
public int GetHashCode(Container obj)
{
return obj.Id.GetHashCode();
}
}
var barcodes = (from src in xmldoc.Descendants("Container")
where src.Descendants().Count() > 0
select
new Container
{
Id = (string)src.Element("Id"),
Barcode = (string)src.Element("Barcode"),
Quantity = float.Parse((string)src.Element("Quantity").Attribute("value"))
}).Distinct(new ContainerComparer());
dataGridView1.DataSource = barcodes.ToList();
这在让我从XML到DataGridView中所需的数据,使用户有办法来操纵价值观的伟大工程。
一旦这样一个步骤,通我的代码跟踪,我发现,这些变化在DataGridView中取得的值不绑定到XDocument对象,因此,将不会重新传播。
我们如何照顾第3步? (将数据返回到XML)是否可以将XML直接绑定到DataGridView?还是必须编写另一条LINQ语句才能将DGV中的数据返回到XDocument?
Suggstions?
嗯...我想我明白你的意思了。这就是我期待与某人交谈的那种对话。由于我不清楚幕后发生了什么事,我不确定我应该对这个“LINQ Magic”有什么期待。我的印象是,LINQ正在返回XDocument中位置的引用,并将它连接到DGV将允许更改直接传回。但现在看起来有点傻。 (或者也许太简单了)。 (尽管它仍然很有趣)。我想我需要考虑更多... – Pretzel 2010-04-30 02:59:24
好吧,我已经考虑了更多,现在我已经非常清楚,只要我CAST每个XML元素到另一个对象,我正在做一个副本。 (没有引用回到XML/XDocument。)我将不得不更多地考虑如何直接引用/从XML文档中引用(如果它甚至值得像这样编程)。再次感谢Glenn! :-) – Pretzel 2010-04-30 14:50:25