Obecnie robię LINQ-do-XML i zapełnianie DataGridView z mojego kwerendy po prostu w porządku. Problem polega na tym, że po załadowaniu do DataGridView, wartości wydają się być Un-editable (ReadOnly). Tu jest mój kodu: „DataGridView będzie w trybie tylko do odczytu podczas korzystania typy anonimowe”LINQ-do-XML do DataGridView: Nie można edytować pól - Jak naprawić?
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();
Czytałem gdzieś, że Ale nie mogłem znaleźć wytłumaczenia dlaczego lub co dokładnie z tym zrobić.
Wszelkie pomysły?
EDIT - Oto odpowiedź wymyśliłem ...
Więc dodałem klasę „pojemnik” (z Get i Set < - bardzo ważne), aby uniknąć typy anonimowe będących ReadOnly Emisja:
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();
}
}
i zmienił oświadczenie 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());
i to jest to! Dzięki za pomoc, Glenn!
@Glenn: Dzięki. To ma sens w mojej głowie. Chociaż wybaczam mi, że jestem nowicjuszem LINQ, ale wciąż staram się owijać głowę wokół tego, co dzieje się pod maską. Mylące jest dla mnie to, że wydawałoby się, że typ anonimowy nadal będzie zwracał odwołania do każdej wartości, tak, że gdy wartość w polu DataGridView zostanie zmieniona, dane XML w XDocument są jednocześnie zmieniane. Czyli mówisz, że jeśli stworzę klasę, która może zawierać te wartości, będę w stanie uzyskać to, czego szukam? – Pretzel