Mein Wissen über die Verwendung von XML in der Anwendung ist sehr einfach, ich suchte auch nach vielen Posts für diese, aber ich konnte nicht finden, was ich suche.XML-Abfrage zu DataGridView mit XDocument in C#
Ich versuche, eine Anwendung zu machen, wo der Benutzer eine XML-Datei erhält, um es in einen bestimmten Ordner zu legen, und die Anwendung liest ihre Daten und bindet sie an ein DataGridView (DGV).
Meine XML-Datei ist wie folgt:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Project>
<PCode>18-01</PCode>
<PName>Project A</PName>
<AllBOQ>
<BOQ Division="Mechanical">
<Items>
<Item>
<Code>M-FF-01</Code>
<Description>Supply and Install of Seamless Black Steel Pipes, Sch. 40, 1"</Description>
<Quantity>50</Quantity>
<Unit>mt</Unit>
</Item>
<Item>
<Code>M-FF-02</Code>
<Description>Supply and Install of Seamless Black Steel Pipes, Sch. 40, 2"</Description>
<Quantity>60</Quantity>
<Unit>mt</Unit>
</Item>
</Items>
</BOQ>
<BOQ Division="Electrical">
<Items>
<Item>
<Code>E-FA-01</Code>
<Description>Supply and Install of Fire Alarm</Description>
<Quantity>15</Quantity>
<Unit>nr</Unit>
</Item>
</Items>
</BOQ>
</AllBOQ>
</Project>
Die Anwendung sollte Dann bevölkert mit der folgenden Reihenfolge "Code", "Beschreibung", "Menge", "Einheit" 4 Spalten in der DGV erstellen sie mit Daten unter Verwendung dieser Abfrage
private void lbxDivision_SelectedIndexChanged(object sender, EventArgs e)
{
// Get selected project XML file
string selCode = lbxProjects.SelectedValue.ToString();
lblTest.Text = lbxDivision.Text;
var boqItems = from itm in selProject.Descendants("BOQ")
where itm.Attribute("Division").Value == lbxDivision.Text
select new BOQItem()
{
Code = itm.Elements("Items").Elements("Item").Elements("Code") .FirstOrDefault().Value,
Description = itm.Elements("Items").Elements("Item").Elements("Description").FirstOrDefault().Value,
Quantity = itm.Elements("Items").Elements("Item").Elements("Quantity") .FirstOrDefault().Value,
Unit = itm.Elements("Items").Elements("Item").Elements("Unit") .FirstOrDefault().Value
};
dataGridView1.DataSource = boqItems.ToList();
}
Die DGV schafft die 4 Säulen aber seine besiedelten mit einer Reihe von Daten nur trotz dieser <BOQ Division="Mechanical">
haben 2 Artikel
Wie abfragen ich alle Elemente unter (Code, Beschreibung, Menge, Einheit), die BOQ Abteilung Attribut = "Mechanical" (oder entsprechend der Benutzerauswahl) haben
Was! ! genau so. Vielen Dank. Möchten Sie Ihren Code erklären? – Tima
Es tut mir leid;). Ihre Auswahl wurde nur einmal pro Definition und nicht pro Artikel ausgeführt. Das ist der Grund, warum du nur einen Gegenstand erhalten hast, statt zwei. Im obigen Code siehst du die Nachkommen ("Item"), also bekommst du jedes Item der Division. – pr177
Ich sehe, warum wir 2 Lambda-Ausdruck "boq" und "itm" benötigt – Tima