2009년 2월 21일 토요일

XML을 GridView에 binding하기

XML을 Datasource로서 GridView에 binding하기 위해서는 아래와 같은 방식으로 처리가 가능하다.


DataSet ds = new DataSet();


XmlTextReader xtr = new XmlTextReader(
xeItemRoot.ToString(), XmlNodeType.Element, new XmlParserContext(null, null, null, XmlSpace.None));

ds.ReadXml(xtr);
GridView1.DataSource =
ds.Tables[1];
GridView1.DataBind();

위에서 사용한 XmlTextReader 생성자의 첫번째 인자에는 잘 구성된 Xml의 Element node나 Document자체가
지정이 가능하며 이는 두번째 인자에서 type을 설정한다. 위와 같은 방법으로 간단하게 처리가 되나 Xml의 구조에
따라 dataset의 table이 생성되는 것이 다르므로 이에 유의 한다.
!지정되는 Element에 attribute가 있으면 해당 attribute만으로 table이 하나 생성된다. 이는 각자의 Xml을 가지고
직접 수행을 해보면 실제적으로 처리되는 내용을 쉽게 알 수 있을 것이다.


간단한 xml을 가지고 샘플 코드로 테스트 한 결과는 아래와 같다.

[샘플코드]
space.xml
------------------------------------------------------------------------------------------------------
XDocument xd = XDocument.Load("D:\\space.xml");

XElement xe1 = new XElement(xd.Root.Element("STARS"));
XElement xe2 = new XElement(xd.Root.Element("DETAILINFOS"));
XElement xe3 = new XElement(xd.Root.Element("PLANETS"));

XmlTextReader xtr1 = new XmlTextReader(xe1.ToString(), XmlNodeType.Element, new XmlParserContext(null, null, null, XmlSpace.None));
XmlTextReader xtr2 = new XmlTextReader(xe2.ToString(), XmlNodeType.Element, new XmlParserContext(null, null, null, XmlSpace.None));
XmlTextReader xtr3 = new XmlTextReader(xe3.ToString(), XmlNodeType.Element, new XmlParserContext(null, null, null, XmlSpace.None));

DataSet ds1 = new DataSet();
ds1.ReadXml(xtr1);
GridView1.DataSource = ds1.Tables[0];
GridView1.DataBind();

DataSet ds2 = new DataSet();
ds2.ReadXml(xtr2);
GridView2.DataSource = ds2.Tables[0];
GridView2.DataBind();

DataSet ds3 = new DataSet();
ds3.ReadXml(xtr3);
GridView3.DataSource = ds3.Tables[0];
GridView3.DataBind();
------------------------------------------------------------------------------------------------------

[결과표]

STAR_Text
Sun
Proxima Centauri
Rigil Kentaurus
Barnard's Star
Wolf 359
Sirius A and B
NAMEDISTANCEFROMTHESUNLENGTHOFYEARROTATIONPERIODVELOCITYDIAMETER
Earth49,600,000 km365.26 days23.93 hours29.79 km/sec12,756 km
Mars228,000,000 km687 days24 hr 37 min24.14 km/sec6,792 km
PLANET_IdNAME
0Mercury
1Venus
2Earth
3Mars
4Jupiter
5Saturn
6Uranus
7Neptune
8Pluto

출처 : http://dialup.egloos.com/1299482

댓글 없음:

댓글 쓰기