Я думаю, что в этом случае для вас проще всего было бы на самом деле поместить ваши XML-данные в DataSet и оттуда привязаться к 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 парень;)), но он просто использует функцию ReadXML DataSet, чтобы получить XmlTextReader, который имеет ваш файл XML.
Теперь способ, которым вашXML настроен так, что он будет иерархически создавать три уровня (Product -> Item -> Description), и в случае, если вы этого не хотите, я включил некоторый пример кода, как объединить таблицы Item и Description, а затем просто удалить таблицу Description.
Это, конечно, небольшой образец, но я верю, что обо всем позаботится.