ASP.Net Dynamic BreadCrumb

Posted on 2006-04-25
Last Modified: 2012-08-13
I created a page that return subcategories based on the  category id.  I need to create a path on top of the page to look something like this: home >> cat3 >> SubCat4 >> SubSubCat2 >> product.  

'cat3' needs to be a link with the Cat_ID ... <a href="mypage.aspx?CatID=3">cat3</a>  
'SubCat4' needs to be a link with the Cat_ID ... <a href="mypage.aspx?CatID=7">SubCat4</a>  

This is dynamic so there is no set number to the category hierarchy.

Here's my table structure with some example data

Cat_ID     Name     Parent_ID
  1           Cat1           0
  2           Cat2           0
  3           Cat3           0
  4        SubCat1         2
  5        SubCat2         2
  6        SubCat3         2
  7        SubCat4         3
  8       SubSubCat1     7
  9       SubSubCat2     7

Cat1, Cat2, & Cat3 are the parents with the ID=0
SubCat 1,2 & 3 belong to Cat2
SubCat 4 belongs to Cat3
SubSubCat1 & 2 belong to SubCat4

I've read through several articles dealing with breadcrumbs but the problem that I run into is my App does searches and jumps in several layers into the hierarchy.  I need to show a path so the user can get back to that location in the future without doing searches.  This path needs to be displayed in the datagrid along with the search results.  The result set looks something similiar to Google or Yahoo.

example ...
the user does a search and gets to product in SubSubCat1 and SubCat2.  I need the app to show this in the datagrid:  

Search results

Product (blah blah)
home >> cat3 >> SubCat4 >> SubSubCat1 >> product

Product (blah blah)
home >> cat2 >> SubCat2 >> product

Also I need to keep track of the categories as the user goes through the layers.
Are there any examples of something like a Stored Procedure that shows how to do this?

Question by:nmachin

    Author Comment

    Possibly a User-Defined Function???

    Author Comment

    I came across a UDF and was able to modify it to build a string with links to all the sub categories through a loop.  

    This is the results I get when I run the UDF...
    <a href="mypage.aspx?CatID=3">Cat3</a> >> <a href="mypage.aspx?CatID=7">SubCat4</a> >> <a href="mypage.aspx?CatID=9">SubSubCat2</a>

    CREATE FUNCTION dbo.GetParentCatPath(@ParentId int)
         DECLARE @blnExit      AS BIT,
              @vchResult      AS VARCHAR(2000),
              @CatId          AS INT,
              @CatName     AS VARCHAR(100),
             @tmpCatName as varchar(100)

         SET      @blnExit=0
         SET      @vchResult=''

         WHILE @blnExit=0

              SELECT      @ParentId=Tbl_Category.Parent_ID,
              FROM      Tbl_Category
              WHERE      Tbl_Category.cat_ID=@ParentId

          IF @CatName IS NULL  
               SET     @blnExit=1
                 SET @tmpCatName = '<a href="mypage.aspx?CatID=' + Convert(varchar(6),@CatID) + '">' + RTRIM(LTRIM(@CatName)) + '</a>'
                 IF @vchResult<>''
                      SET      @vchResult= @tmpCatName + ' '+ '>>' + ' ' + @vchResult
                      SET      @vchResult= @tmpCatName
                 IF @ParentId=0
                      SET     @blnExit=1

         RETURN @vchResult

    How can something like this be implemented into a dataset which will be displayed on in a DataGrid.
    LVL 33

    Accepted Solution

    The function I wrote would essentially populate the entire tree into a treeview control, it wasn't running from a deep-nested node to the parent.
    Given a nested node, you can get the path to the root like so,

    Declare @tmpID int
    Set @tmpID = 54

    Declare @tmp table(
         tmpID int

    While @tmpID <> 0
         Insert Into @tmp (tmpID) values (@tmpID)
         select @tmpID = parent from template where tmpID=@tmpID

    select * from @tmp

    Featured Post

    How to run any project with ease

    Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
    - Combine task lists, docs, spreadsheets, and chat in one
    - View and edit from mobile/offline
    - Cut down on emails

    Join & Write a Comment

    Lots of people ask this question on how to extend the “MembershipProvider” to make use of custom authentication like using existing database or make use of some other way of authentication. Many blogs show you how to extend the membership provider c…
    IntroductionWhile developing web applications, a single page might contain many regions and each region might contain many number of controls with the capability to perform  postback. Many times you might need to perform some action on an ASP.NET po…
    Hi everyone! This is Experts Exchange customer support.  This quick video will show you how to change your primary email address.  If you have any questions, then please Write a Comment below!
    Sending a Secure fax is easy with eFax Corporate ( First, Just open a new email message.  In the To field, type your recipient's fax number You can even send a secure international fax — just include t…

    755 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    21 Experts available now in Live!

    Get 1:1 Help Now