【发布时间】:2010-04-28 22:29:20
【问题描述】:
我目前正在执行 LINQ-to-XML 并使用我的查询填充 DataGridView。我遇到的问题是,一旦加载到 DataGridView 中,这些值似乎是不可编辑的(只读)。这是我的代码:
var barcodes = (from src in xmldoc.Descendants("Container")
where src.Descendants().Count() > 0
select
new
{
Id = (string)src.Element("Id"),
Barcode = (string)src.Element("Barcode"),
Quantity = float.Parse((string)src.Element("Quantity").Attribute("value"))
}).Distinct();
dataGridView1.DataSource = barcodes.ToList();
我在某处读到“当您使用匿名类型时,DataGridView 将处于只读模式。”但我找不到解释为什么或究竟该怎么做。
有什么想法吗?
编辑 -- 这是我想出的答案...
所以我添加了一个“容器”类(使用 Get 和 Set
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();
}
}
并将 LINQ 语句更改为:
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());
就是这样!谢谢你的帮助,格伦!
【问题讨论】:
标签: c# linq datagridview c#-3.0 linq-to-xml