2009-08-25 7 views
0

J'ai besoin de remplir un DataGridView conditionnellement. Les données proviennent d'un fichier XML, par ex.C# DataGridView liaison au sous-ensemble de XML

<?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> 

Si j'utilise le code suivant je peux montrer tous les chiens dans le DataGridView - mais je dois limiter la liste à ceux appartenant à des personnes spécifiques.

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

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

Comment faire?

Merci Stuart

Répondre

0

Vous pouvez obtenir les XElements avec le code suivant:

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"; 

À titre d'exemple, je choisis le propriétaire du chien ainsi ici.

Vous devez ajouter une référence à System.Xml et System.Xml.Linq

+0

Hmm ... ont pas joué avec Linq avant. Je vais y aller. Merci! –

+0

Enfin je me déplace pour essayer cela! Mais j'ai un problème sur la toute dernière ligne (lors de la définition du DataMember): "La liste des enfants pour le nom du champ ne peut pas être créée." Pouvez-vous me donner un pointeur? Merci d'avance! –