Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 709
  • Last Modified:

ASP.Net Dynamic BreadCrumb

I created a asp.net 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?

  • 2
1 Solution
nmachinAuthor Commented:
Possibly a User-Defined Function???
nmachinAuthor Commented:
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.
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

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now