Click here to Skip to main content
6,935,947 members and growing! (19,323 online)
Email Password   helpLost your password?
Enterprise Systems » SharePoint Server » Web Parts     Intermediate License: The Code Project Open License (CPOL)

Tree View WebPart for Sharepoint List Data

By Isha Attlee

A treeview WebPart for Sharepoint list data.
C#, .NET, ASP.NET, Dev
Revision:3 (See All)
Posted:20 Sep 2009
Views:5,725
Bookmarked:6 times
printPrint Friendly   add Share
      Discuss Discuss   Broken Article?Report  
1 vote for this article.
Popularity: 0.00 Rating: 3.00 out of 5

1

2
1 vote, 100.0%
3

4

5

Introduction

This article provides you with the code snippet to display a SharePoint list data as a tree view WebPart.

Background

The code creates a tree view control and then populates it with various folders and subfolders from a given list. To access the subfolders of the list, an SPQuery variable is used. The list item is first checked with a condition (listitem.Folder == null) to determine whether it is a folder or a list item. The GetItems recursive method is then called to get the list item or the items in the folder.

Using the code

The code displays data from a "Links" type custom list called "All Programs" as a tree view. The CreateChildControl method calls the GetFolder method to access the subfolders of the list. The GetFolder method further calls the GetItems method to get the items or subfolders in a subfolder. GetItems uses SPquery to get the items in a folder and is called recursively to get the items in subfolders of a folder.

public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart
{
    TreeView treeView;
    TreeNode rootNode;

    public WebPart1()
    {
    }

    protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
    {
        // render the control
        base.RenderContents(writer);
    }

    protected override void CreateChildControls()
    {
        base.CreateChildControls();

        // get the current site
        SPSite currentSite = SPContext.Current.Site;
        using (SPWeb currentWeb = currentSite.OpenWeb())
        {
            // set the tree view properties
            treeView = new System.Web.UI.WebControls.TreeView();
            treeView.ShowLines = true; // show lines
            treeView.ExpandDepth = 0; // expand non

            SPList list = currentWeb.Lists["All Programs"];

            // build the tree
            rootNode = new System.Web.UI.WebControls.TreeNode(list.Title, "", 
                       "", list.RootFolder.ServerRelativeUrl.ToString(), "");

            // loop down the tree
            GetFolder(list.RootFolder, rootNode, list);

            // add the root node to tree view
            treeView.Nodes.Add(rootNode);
        }
        this.Controls.Add(treeView);
        base.CreateChildControls();
    }

    public void GetFolder(SPFolder folder, TreeNode rootNode, SPList list)
    {
        // create a new node
        TreeNode newNode = new System.Web.UI.WebControls.TreeNode(folder.Name, "", 
                           "~/_layouts/images/itdl.gif", 
                           folder.ServerRelativeUrl.ToString(), "");
        try
        {
            // don't add the forms folder
            if (folder.Name != "Link")
            {
                // loop through all child folders
                foreach (SPFolder childFolder in folder.SubFolders)
                {
                    // don't add the forms folder
                    if (childFolder.Name != "Link")
                    {
                        TreeNode trn = 
                          new System.Web.UI.WebControls.TreeNode(childFolder.Name, "", 
                          "", childFolder.ServerRelativeUrl.ToString(), "");
                        newNode = GetItems(childFolder, trn);

                        // add the new node to the tree
                        rootNode.ChildNodes.Add(newNode);
                    }
                }
            }
        }
        catch { }
    }

    public TreeNode GetItems(SPFolder folder, TreeNode node)
    {
        //Get Items from childFolder
        SPQuery qry = new SPQuery();
        qry.Folder = folder;
        SPWeb web = null;

        web = folder.ParentWeb;
        SPListItemCollection ic = web.Lists[folder.ParentListId].GetItems(qry);

        foreach (SPListItem subitem in ic)
        {
            if (subitem.Folder != null) //Is Subfolder
            {
                // create a new node for a subfolder and add items to it
                TreeNode childNode = 
                  new System.Web.UI.WebControls.TreeNode(subitem.Folder.Name);
                node.ChildNodes.Add(GetItems(subitem.Folder, childNode));
            }  

            if (subitem.Folder == null)
            {
                TreeNode trn1 = new System.Web.UI.WebControls.TreeNode(
                                      subitem["Title0"].ToString());
                node.ChildNodes.Add(trn1);
            }
        }
        return node;
    }
}

In the above code, SPquery is used to get the items from a given folder since there is no other way to get items from a list of subfolders as item.folder does not expose subfolders.

For any comments and questions on this article, please visit my blog: http://mysharepointwork.blogspot.com/2009/09/tree-view-webpart-for-list-data.html.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Isha Attlee


Member

Occupation: Software Developer (Senior)
Location: United States United States

Other popular SharePoint Server articles:

 
Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
  (Refresh) 
-- There are no messages in this forum --

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+PgUp/PgDown to switch pages.

PermaLink | Privacy | Terms of Use
Last Updated: 20 Sep 2009
Editor: Smitha Vijayan
Copyright 2009 by Isha Attlee
Everything else Copyright © CodeProject, 1999-2010
Web19 | Advertise on the Code Project