2009-08-25 4 views
0

Мне нужно заполнить DataGridView условно. Данные поступают из одного файла XML, например.C# привязка DataGridView к подмножеству 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> 

Если я использую следующий код, который я могу показать все собака в DataGridView - но мне нужно, чтобы ограничить список тех, которые принадлежат конкретным людям.

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

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

Как это сделать?

Благодаря Стюарт

ответ

0

Вы можете получить XElements со следующим кодом:

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

Просто в качестве примера я выбрал владелец собаки, а здесь.

Вы должны добавить ссылку на System.Xml и System.Xml.Linq

+0

Хм ... не играл с Linq раньше. Я отдам его. Благодаря! – 2009-08-25 10:08:34

+0

Наконец я обойдусь, чтобы попробовать это! Но у меня проблема в самой последней строке (при установке DataMember): «Список дочерних элементов для имени поля не может быть создан». Можете ли вы дать мне указатель? Заранее спасибо! – 2009-09-11 12:25:29

Смежные вопросы