2010-07-29 19 views
0

請幫我將這個多級xml讀取到RadGrid中。 1)我計劃不要爲此使用Aspx 2)名爲Item的節點最終會根據應用程序需求進行更改。所以,我不想通過將XMLNode限制我的XPath來類似「//產品/項目」如何讀取vb.net中的多級xml,綁定到radgrid

<Products> 
     <Product ProductID="1"> 
     <Item ItemID="1"> 
      <ProductNo>1234</ProductNo> 
      <Description> 
      <ManufacDate>20100526T12:00:01.012</ManufacDate> 
      <ManufacID>72</ManufacID> 
      </Description> 
     </Item> 
     <Item ItemID="2"> 
      <ProductNo>1235</ProductNo> 
      <Description> 
      <ManufacDate>20100527T12:00:01.012</ManufacDate> 
      <ManufacID>72</ManufacID> 
      </Description> 
     </Item> 
     <Item ItemID="3"> 
      <ProductNo>1236</ProductNo> 
      <Description> 
      <ManufacDate>20100528T12:00:01.012</ManufacDate> 
      <ManufacID>66</ManufacID> 
      </Description> 
     </Item> 
    </Product></Products> 

我讀從代碼隱藏這個XML和迭代在網格中顯示。請在下面找到我的代碼段:

Dim root as new xmldocument() 

' After loading the above xml into root 

Dim ndl As XmlNodeList = root.SelectNodes("//Products") 

For Each chNode As XmlNode In ndl 

       Dim chObjNode As XmlNodeList = root.SelectNodes("descendant::node()[ancestor::Product[@ProductID=""1""]]") 
       For Each XNode As XmlNode In chObjNode 
        ds.ReadXml(New XmlNodeReader(XNode)) 
       Next 
      Next 
radgrid1.datasource = ds 
radgrid1.databind() 

考慮到this參考。 如果您可以幫助我更正或提供此問題的解決方案而無需轉換爲XSL,那就太好了。我需要Columns:ItemID,ProductNo,用ManufacDate和ManufacID縮進描述。我不知道如何讓這個顯示。

感謝

回答

1

我認爲你在這種情況下,最容易做的事情將是真正讓你的XML數據到數據集,並從那裏綁定到radgrid控件。

我居然拿了示例XML上方,用下面的標記(注意AutoGenerateHierarchy屬性設置爲true,只是爲了便於測試):

<telerik:RadGrid ID="RadGrid1" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource" AutoGenerateHierarchy="true"> 
    </telerik:RadGrid> 

在代碼隱藏我做了以下內容:

Protected Sub RadGrid1_NeedDataSource(ByVal sender As Object, ByVal e As GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource 
    RadGrid1.DataSource = GetHierarchicalXmlData() 
End Sub 

Private XMLDataSet As DataSet 
Private Function GetHierarchicalXmlData() As DataSet 
    If XMLDataSet IsNot Nothing Then 
     Return XMLDataSet 
    End If 

    XMLDataSet = New DataSet() 
    Dim reader As New XmlTextReader(Server.MapPath("SampleXML.xml")) 
    XMLDataSet.ReadXml(reader) 


    ' in case you do not want a three-level hierarchy: 
    ' this just merges the item and the description table 
    ' and then removes the description table    

    XMLDataSet.Tables(1).Merge(XMLDataSet.Tables(2)) 
    XMLDataSet.Relations.Remove("Item_Description") 
    XMLDataSet.Tables(2).Constraints.Clear() 
    XMLDataSet.Tables.RemoveAt(2) 

    Return XMLDataSet 
End Function 

什麼上面的代碼不應該是很簡單的(雖然我不是一個VB.NET的傢伙;)),但它只是使用DataSet的ReadXML的功能,採取有你的XML文件中的XmlTextReader。

現在,您的XML的設置方式,這將分層次創建三個級別(產品 - >項目 - >描述),如果你不想這個,我包括了一些示例代碼如何合併項目和說明表和那麼只需刪除Description表。

這當然只是一個小樣本,但我相信它需要處理所有事情。