2012-10-14 54 views
0

继从here亚马逊Web服务API一个例子,我有一个XML ResponseStream填充像这样的数据集:选择从XML数据集的某些属性为GridView控件

DS.ReadXml(responseStream); 

它,然后通过DataBind已传递到GridView像所以:

GridView1.DataSource = DS.Tables["ItemAttributes"]; 
GridView1.DataBind(); 
GridView2.DataSource = DS.Tables["Item"]; 
GridView2.DataBind(); 

的问题是,我得到的所有列从XML,并在两个表,我想表明在一个表中的XML属性只有某些列(DetailPageURL,作者,标题)。我尝试了类似帖子的东西,但都没有奏效。我试图将它传递给XDocument之前将它放在一个GridView,但我得到一个“根元素丢失”的错误。另外,试图用Linq提取这些列,但没有工作。但是我的知识是有限的,所以我可能会在代码上做错了什么。

认为云在数据集XML响应的片段是:

<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"> 
<OperationRequest> 
<HTTPHeaders> 
<Header Name="UserAgent" Value="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"/> 
</HTTPHeaders> 
<RequestId>fafe85b6-3002-49ec-b716-e2057f9b94a0</RequestId> 
<Arguments> 
<Argument Name="Operation" Value="ItemSearch"/> 
<Argument Name="Service" Value="AWSECommerceService"/> 
<Argument Name="Signature" Value="..."/> 
<Argument Name="AssociateTag" Value="..."/> 
<Argument Name="Version" Value="2011-08-01"/> 
<Argument Name="Keywords" Value="harry potter"/> 
<Argument Name="AWSAccessKeyId" Value="..."/> 
<Argument Name="Timestamp" Value="2012-10-14T15:16:02.000Z"/> 
<Argument Name="SearchIndex" Value="Books"/> 
</Arguments> 
<RequestProcessingTime>0.0701880000000000</RequestProcessingTime> 
</OperationRequest> 
<Items> 
<Request>...</Request> 
<TotalResults>8394</TotalResults> 
<TotalPages>840</TotalPages> 
<MoreSearchResultsUrl>...</MoreSearchResultsUrl> 
<Item> 
<ASIN>059035342X</ASIN> 
<DetailPageURL>...</DetailPageURL> 
<ItemLinks>...</ItemLinks> 
<ItemAttributes> 
<Author>J.K. Rowling</Author> 
<Creator Role="Illustrator">Mary GrandPré</Creator> 
<Manufacturer>Scholastic Paperbacks</Manufacturer> 
<ProductGroup>Book</ProductGroup> 
<Title>Harry Potter and the Sorcerer's Stone (Book 1)</Title> 
</ItemAttributes> 

回答

0

要回答我的问题,我宣布了两个新的数据表,并在他们把所需的列,就像这样:

var dataTable1 = DS.Tables["Item"]; 
var dataTable2 = DS.Tables["ItemAttributes"]; 

if (dataTable1.Rows.Count > 0) 
{ 
    foreach (DataRow row in dataTable1.Rows) 
    { 
     var url = row["DetailPageURL"].ToString(); 
    } 
} 

if (dataTable2.Rows.Count > 0) 
{ 
    foreach (DataRow row in dataTable2.Rows) 
    { 
     var title = row["Title"].ToString(); 
     var author = row["Manufacturer"].ToString(); 
    } 
} 

我现在需要的是找到一种方法将两个表放在一起,因为这是显示错误:

dataTable1.Merge(dataTable2); 
DataTable merged = dataTable1; 
GridView1.DataSource = merged;