Mohamed Kamal
Mohamed Kamal

Reputation: 2352

How to display XML data into ASP.Net gridview?

Experts ! i am very new to XML. However, a webapp collects data in XML form and i have to display it (and enable edit) in an ASP.Net GridView. i need your help, please.

<?xml version="1.0"?>
<Answers>
  <AnswerSet>
<Answer questionId="MRN">4444</Answer>
<Answer questionId="FName">test</Answer>
<Answer questionId="LName">patient</Answer>
<Answer questionId="AddressPt">blah blah</Answer>
<Answer questionId="Governorate">xxxx</Answer>
<Answer questionId="InitialCSF">Negative</Answer>
<Answer questionId="Diagnosis"></Answer>
<Answer questionId="Description">
</Answer>
  </AnswerSet>
  <AnswerSet>
<Answer questionId="MRN">1</Answer>
<Answer questionId="FName">1</Answer>
<Answer questionId="LName">1</Answer>
<Answer questionId="AddressPt">1</Answer>
<Answer questionId="InitialCSF">Positive</Answer>
<Answer questionId="Diagnosis">dx</Answer>
<Answer questionId="Description">
</Answer>
  </AnswerSet>
 </Answers>

Upvotes: 2

Views: 8872

Answers (1)

Icarus
Icarus

Reputation: 63966

Easiest way I can think of to bind the XML to a gridview is to to load the xml to a DataSet and then bind the DataSet to the gridview:

StringReader sr= new StringReader(xml); 
DataSet ds = new DataSet();
ds.ReadXml(sr);

Gridview.DataSource=ds.Tables[1];
Gridview.DataBind();

Reason for doing ds.Tables[0] is that your example contains 2 sets of Answers and when you load the DataSet with your XML, the first DataTable will contain as many rows as sets of answers you have on your XML while the second table will contain all the rows from all the set of answers.

The way LinqPad displays it is as follows:

enter image description here

UPDATE:

string xml=@"<?xml version=""1.0""?>
<Answers>
  <AnswerSet>
<Answer questionId=""MRN"">4444</Answer>
<Answer questionId=""FName"">test</Answer>
<Answer questionId=""LName"">patient</Answer>
<Answer questionId=""AddressPt"">blah blah</Answer>
<Answer questionId=""Governorate"">xxxx</Answer>
<Answer questionId=""InitialCSF"">Negative</Answer>
<Answer questionId=""Diagnosis""></Answer>
<Answer questionId=""Description"">
</Answer>
  </AnswerSet>
  <AnswerSet>
<Answer questionId=""MRN"">1</Answer>
<Answer questionId=""FName"">1</Answer>
<Answer questionId=""LName"">1</Answer>
<Answer questionId=""AddressPt"">1</Answer>
<Answer questionId=""InitialCSF"">Positive</Answer>
<Answer questionId=""Diagnosis"">dx</Answer>
<Answer questionId=""Description"">
</Answer>
  </AnswerSet>
 </Answers>";
StringReader sr= new StringReader(xml); 
 DataSet ds = new DataSet();
 ds.ReadXml(sr);
 ds.Merge(ds,true);
 gridview.DataSoure=ds.Tables[1];
     gridview.DataBind();

Upvotes: 5

Related Questions