2009-08-25 2 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를 연주하지 않은를 추가해야합니다. 나는 그것을 줄 것이다. 감사! –

+0

마침내 나는 이것을 시험해보기 위해 돌아 다닌다! 하지만 난 마지막 라인 (DataMember를 설정할 때)에 문제가 있습니다. "필드 이름의 하위 목록을 만들 수 없습니다." 포인터를 줄 수 있습니까? 미리 감사드립니다! –

관련 문제