2009-08-25 8 views
0

Ich muss ein DataGridView bedingt füllen. Die Daten stammen aus einer XML-Datei, z.C# DataGridView-Bindung an XML-Untermenge

<?xml version="1.0" standalone="yes"?> 
<people> 
    <person> 
    <name>Bob</name> 
    <dogs> 
     <dog><name>Rover</name></dog> 
     <dog><name>Rex</name></dog> 
    </dogs> 
    </person> 
    <person> 
    <name>Jim</name> 
    <dogs> 
     <dog><name>Duke</name></dog> 
     <dog><name>Colin</name></dog> 
     <dog><name>Gnasher</name></dog> 
    </dogs> 
    </person> 
</people> 

Wenn ich den folgenden Code, ich alle Hunde in der Datagridview zeigen kann - aber ich brauche die Liste zu dem von bestimmten Personen im Besitz zu beschränken.

DataSet ds = new DataSet(); 
ds.ReadXml("data.xml"); 

dataGridView1.DataSource = ds; 
dataGridView1.DataMember = "dog"; 

Wie mache ich das?

Dank Stuart

Antwort

0

Sie die XElements mit dem folgenden Code bekommen:

var xml = XDocument.Load(filePath); 

var people = xml.Elements("people").Elements("person"); 
var dogElements = people.Elements("dogs").Elements("dog").Where(p => p.Parent.Parent.Element("name").Value == "Bob"); 

var dogs = dogElements.Select(d => new {Name = d.Element("name").Value, Owner = d.Parent.Parent.Element("name").Value}); 

dataGridView1.DataSource = dogs; 
dataGridView1.DataMember = "Name"; 

Nur als Beispiel habe ich den Besitzer des Hundes auch hier.

Sie werden einen Verweis auf System.Xml und System.Xml.Linq hinzufügen müssen

+0

Hmm ..., bevor mit Linq nicht gespielt. Ich werde es gehen lassen. Vielen Dank! –

+0

Endlich komme ich dazu, es auszuprobieren! Aber ich habe ein Problem in der allerletzten Zeile (beim Setzen des DataMember): "Unterliste für Feld Name kann nicht erstellt werden." Können Sie mir einen Zeiger geben? Danke im Voraus! –