Once we got a requirement to display certain media library items in our page. We have certain controls like DataTreeView in Sitecore which can be extended based on our requirement.
<DataContext ID="TreeviewDataContext" Root=”{3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1}” DataViewName=”Master” />
<DataTreeview ID="Treeview" DataContext="TreeviewDataContext" Root="true">
</DataTreeview>
But we faced some challenges in extending DataTreeView.
Another simple and easily extendable solution would be Telerik’s RadTreeView and Sitecore.Resources.ImageBuilder API.
<telerik:RadTreeView ID="contentTree" runat="server" OnNodeDataBound="contentTree_NodeDataBound" ItemType="Sitecore.Data.Items.Item"> </telerik:RadTreeView>
protected void contentTree_NodeDataBound(object sender, RadTreeNodeEventArgs e)
{
UpdateTree(e.Node);
}
private void UpdateTree(RadTreeNode treeNode)
{
Item currentItem = (Item)treeNode.DataItem;
//Binding Icon and Name of Sitecore Item
HtmlGenericControl nodeContainer = new HtmlGenericControl("div");
ImageBuilder imageBuilder = new ImageBuilder() { Height = 16, Src = currentItem.Appearance.Icon, Width = 16 };
nodeContainer.InnerHtml = imageBuilder.ToString() + currentItem.Name;
treeNode.Controls.Add(nodeContainer);
//Binding Child Items
foreach (Item childItem in currentItem.Children)
{
RadTreeNode currentNode = new RadTreeNode() { DataItem = childItem };
UpdateTree(currentNode);
treeNode.Nodes.Add(currentNode);
}
treeNode.DataBind();
}
Hope this will save you some time, if you are looking out for more customization. Otherwise DataTreeView will help.
Originally Posted at: https://www.nttdatasitecore.com/Blog/2017/February/Rendering-Sitecore-Content-Tree
