Skip to main content

TreeView Control With Custom Icons in ASP.Net Using sitemap


TreeView Control With Custom Icons in ASP.Net Using sitemap

Previous post  Load data dynamically on page scroll using jQuery, AJAX, and ASP.NET

Introduction 
 
The TreeView control is capable of many possible appearances, providing flexible image customization as well as properties that specify custom user interface (UI) options.
We can use images with the TreeView control to represent nodes, connecting lines, and the expand and collapse icons and can also use a predefined set of images from the ImageSet property, or use custom images by setting the individual image properties for each of its nodes.
 
Background
 
My Website is also hierarchical in structure so I knew that a TreeView control was required. The problem was, how to show multiple icons in the treeview, where each icon represents a specific type. The icons must also show a tooltip when hovered over to display the full name of the type using the Sitemap with Sitemap Data Source control .
 
SiteMap Menu with Custom icons
 
While binding a  TreeView to a SiteMapDataSource is very easy, it can prove challenging to determine how to extend the site map with custom properties and use these extended properties in a TreeView . This sample shows how to add custom icons to a sitemap-driven menu.

SiteMap allows the addition of custom attributes to your site map nodes. If you're using the XML site map provider, it's as simple as this:

<siteMapNode url="default.aspx" title="Home" description="The home page" imageUrl="home.gif">

Here, imageUrl is a custom property, not defined by the SiteMap infrastructure by default.

The first idea that comes to mind is to use these custom attributes to just replace the automatic bindings you get from binding a TreeView to a SiteMapDataSource with "manual" bindings. This works very well with SiteMapDataSource because it is implemented so that the nodes implement an ICustomTypeDescriptor, so any XML attribute is exposed as a property on the node as far as reflection is concerned. This is a very powerful feature of .NET reflection that gives it some of the qualities of dynamic languages. Unfortunately, SiteMapDataSource does not implement this, nor does Treeview know how to query custom site map attributes. This is an oversight and support for that might be added in future releases.

An easy (although not declarative) way out of this problem is to hook the OnTreeNodeDataBoundevent and to set the custom properties from there as in the following:
protected void TreeView1_TreeNodeDataBound(object sender, TreeNodeEventArgs e)
{
    // Reference the underlying SiteMapNode object...

    SiteMapNode nodeFromSiteMap = (SiteMapNode)e.Node.DataItem;

   // If we have an imageUrl value, assign it to the TreeView node's ImageUrl property

   if (nodeFromSiteMap["imageUrl"] != null)

   e.Node.ImageUrl = System.IO.Path.Combine("~/Images/", nodeFromSiteMap["imageUrl"]);

}
 
The Tree View Control looks like this:
<asp:TreeView ID="TreeView1" DataSourceID="SiteMapDataSource1"
NodeStyle-CssClass="treeNode" RootNodeStyle-CssClass="rootNode" LeafNodeStyle-CssClass="leafNode"
EnableViewState
="False" runat="server" ImageSet="BulletedList" ShowLines="false"OnTreeNodeDataBound="TreeView1_TreeNodeDataBound">
  <
ParentNodeStyle Font-Bold="False" />
  <
HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
  <
SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD"
  HorizontalPadding="0px" VerticalPadding="0px" />
  <
NodeStyle Font-Names="VerdanaFont-Size="8pt" ForeColor="Black"
  HorizontalPadding="5px" NodeSpacing="0px" VerticalPadding="0px" />
</
asp:TreeView>
<
asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
The SiteMap structure looks like the following:
 
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode title="Home" description="Home" roles="*" url="" >
    <siteMapNode url="Admin/Home.aspx" title="Admin HomeimageUrl="Home-icon.png" roles="Admin" />
    <siteMapNode url="Agent/Home.aspx" title="Agent Homeroles="Agent" />
    <siteMapNode title="Services" description="Services" roles="Admin,Agent" imageUrl="customer-service-icon.png">
      <siteMapNode url="Admin/AddUser.aspx" title="Add Userroles="Admin" />
      <siteMapNode url="Admin/DeleteUser.aspx" title="Delete userroles="Admin" />
      <siteMapNode url="Agent/SearchUser.aspx" title="Search Userroles="Agent" />
      <siteMapNode url="Agent/ViewUser.aspx" title="View Userroles="Agent" />
    </siteMapNode>
    <siteMapNode title="UserMangement" description="Services" roles="Admin,Agent">
      <siteMapNode url="Admin/AddUser1.aspx" title="Add Userroles="Admin" />
      <siteMapNode url="Admin/DeleteUser1.aspx" title="Delete userroles="Admin" />
      <siteMapNode url="Agent/SearchUser1.aspx" title="Search Userroles="Agent" />
      <siteMapNode url="Agent/ViewUser1.aspx" title="View Userroles="Agent" />
    </siteMapNode>
    <siteMapNode title="reportsdescription="Services" roles="Admin,Agent">
      <siteMapNode url="Admin/AddUser2.aspx" title="Add Userroles="Admin" />
      <siteMapNode url="Admin/DeleteUser2.aspx" title="Delete userroles="Admin" />
      <siteMapNode url="Agent/SearchUser2.aspx" title="Search Userroles="Agent" />
      <siteMapNode url="Agent/ViewUser2.aspx" title="View Userroles="Agent" />
    </siteMapNode>
  </siteMapNode>
</siteMap>

TreeViewControl
The final output looks as in the previous image.

Comments

Popular posts from this blog

ASP.NET e-Commerce website GridView with Product Listing

Introduction : E-Commerce web applications are everywhere these days, and many share a common set of functionality. In this article, I will show how to use the GridView and ListView controls to build a powerful product page with many of the features found on today's e-commerce sites. We'll build a bicycle store product grid using some free clip art bicycle images. The example files are user controls which can be easily added to a page. We're only using three images here to keep the size of the sample application small. In previously I was explained about  Sending Email from Asp.net With Dynamic Content  ,  How To Export gridview data to Excel/PDF , CSV Formates in asp.net C#  , How to print Specific Area in asp.net web page How To- Search records or data in gridview using jQuery  . A shopping cart application would require to display the products in a multi column grid, rather than a straight down list or a table. The each item in a product grid would have

How to hide url parameters in asp.net

There are different ways to Hide the URL in asp.net , you can choose any one from bellow options . Previously I was Explained about the  Difference between Convert.tostring and .tostring() method Example  ,   Reasons to use Twitter Bootstrap , How to Register AJAX toolkit in web.config file in asp.net a) Using Post Method b) Using Of Session . c) URL Encoding & decoding process . d) Using Server.Transfer() instead of Response.Redirect() method (1)Use a form and POST the information. This might require additional code in source pages, but should not require logic changes in the target pages (merely change Request.QueryString to Request.Form). While POST is not impossible to muck with, it's certainly less appealing than playing with QueryString parameters. (2)Use session variables to carry information from page to page. This is likely a more substantial effort compared to (1), because you will need to take session variable checking into account (e.g. the

Nested GridView in ASP.NET Using c# with show/hide

In This example shows how to create Nested GridView In Asp.Net Using C# And VB.NET With Expand Collapse Functionality. Previous post I was Explained about the   ASP.NET e-Commerce website GridView with Product Listing  ,  How To Export gridview data to Excel/PDF , CSV Formates in asp.net C# , Sending Email from Asp.net With Dynamic Content  ,  SQL Server- Case Sensitive Search in SQL Server I have used JavaScript to Create Expandable Collapsible Effect by displaying Plus Minus image buttons. Customers and Orders Table of Northwind Database are used to populate nested GridViews. Drag and place SqlDataSource from toolbox on aspx page and configure and choose it as datasource from smart tags Go to HTML source of page and add 2 TemplateField in <Columns>, one as first column and one as last column of gridview. Place another grid in last templateField column. Markup of page after adding both templatefields will like as shown below. HTML SOURCE < a