How to create Treeview Web Part
 
- Open Visual studio . File --> New --> Project --> Visual C# --> Select  Web part  --> Give Proper name of file e.g. For this tutorial DocLibTreeView and click ok.
- Give Reference System.Drawing and system.Data files.
- Open DocLibTreeView.cs. Now copy the following code and paste into file nothing else to do.
using System
using System.Data
using System.Drawing
using System.ComponentModel
using System.Runtime.InteropServices
using System.Web
using System.Web.UI
using System.Web.UI.WebControls
using System.Web.UI.HtmlControls
using System.Xml.Serialization
using Microsoft.SharePoint
using Microsoft.SharePoint.Utilities
using System.Web.UI.WebControls.WebParts
using Microsoft.SharePoint.WebControls
using System.Collections.Generic
 
namespace Apoweb.WebParts
{
      [Guid("58e12124-d7ea-4ec0-bd4f-3ed6804abf9a")]
      public class DocLibTreeView : System.Web.UI.WebControls.WebParts.WebPart
      {
              private string _docName
              private string _rootImageName = "_layouts/DocLib/images/document.gif"
              private string _parentImageName = "_layouts/DocLib/images/folder.gif"
              private string _leafImageName = "_layouts/DocLib/images/file.jpg"
              private string _noExpandImageName = "_layouts/DocLib/images/dot.gif"
              private string _expandImageName = "_layouts/DocLib/images/plus.gif"
              private string _collapseImageName = "_layouts/DocLib/images/minus.gif"
              //private string _rootImageName = "LAYOUTS/DocLib/images/openfolder.jpg"
 
              TreeView docTreeView
 
              public DocLibTreeView()
              {
 
              }
              # region Properties
              [WebBrowsable(false)]             
              [Personalizable(PersonalizationScope.Shared)]             
              public string DocName
              {
                      get { return _docName }
                      set { _docName = value }
              }
              [Personalizable(PersonalizationScope.Shared)]
              [WebBrowsable(false)]
              [System.ComponentModel.Category("Settings")]               
              public string RootImageName
              {                     
                      get { return _rootImageName }
                      set { _rootImageName = value }
              }
              [Personalizable(PersonalizationScope.Shared)]
              [WebBrowsable(false)]
              [System.ComponentModel.Category("Settings")]
              public string ParentImageName
              {
                      get { return _parentImageName }
                      set { _parentImageName = value }
              }
              #endregion
              protected override void CreateChildControls()
              {
                      base.CreateChildControls()
 
                      this.Title = "Document Tree View"
 
                      docTreeView = new TreeView()
                      docTreeView.ID = "docTreeView"                      
                      docTreeView.ShowExpandCollapse.Equals(true)
                      docTreeView.ShowLines.Equals(true)
                      docTreeView.ShowCheckBoxes.Equals(true)
                      docTreeView.RootNodeStyle.ImageUrl = _rootImageName
                      docTreeView.ParentNodeStyle.ImageUrl = _parentImageName
                      docTreeView.LeafNodeStyle.ImageUrl = _leafImageName
                      docTreeView.CollapseImageUrl = _collapseImageName
                      docTreeView.ExpandImageUrl = _expandImageName
                      docTreeView.NoExpandImageUrl = _noExpandImageName
 
                      docTreeView.NodeStyle.ForeColor=Color.FromKnownColor(KnownColor.Black)
                      docTreeView.NodeStyle.Font.Name.Equals("Verdana")
                      docTreeView.NodeStyle.Font.Size=FontUnit.Parse("8")
                      docTreeView.NodeStyle.HorizontalPadding=Unit.Parse("5")                      
                      docTreeView.HoverNodeStyle.BackColor= Color.FromArgb(204,204,204)
                      docTreeView.HoverNodeStyle.BorderColor=Color.FromArgb(136,136,136)
                      docTreeView.HoverNodeStyle.BorderWidth=Unit.Parse("1")
                      docTreeView.HoverNodeStyle.BorderStyle=BorderStyle.Solid
                      docTreeView.SelectedNodeStyle.BackColor=Color.FromKnownColor(KnownColor.White)
                      docTreeView.SelectedNodeStyle.BorderColor=Color.FromArgb(136,136,136)
                      docTreeView.SelectedNodeStyle.BorderWidth=Unit.Parse("3")
                      docTreeView.SelectedNodeStyle.BorderStyle=BorderStyle.Solid
                      docTreeView.SelectedNodeStyle.ImageUrl = "/_layouts/DocLib/openfolder.jpg"
                      docTreeView.NodeIndent = 10                    
                      docTreeView.PreRender+=new EventHandler(docTreeView_PreRender)
                   
                      Controls.Add(docTreeView)
              }
                             
              public void docTreeView_PreRender(object sender, EventArgs e)
              {
                      docTreeView.Nodes.Clear()
                      BuildTreeView()                      
              }
              protected void BuildTreeView()
              {
                      SPWeb currentWeb = SPControl.GetContextWeb(Context)
                     
                      SPFolderCollection folders                      
 
                      if (this.DocName!=null)
                      {
                              folders = currentWeb.GetFolder(this.DocName).SubFolders
 
                              TreeNode rootNode = new TreeNode(folders.Folder.Name, folders.Folder.Name)
                              rootNode.SelectAction = TreeNodeSelectAction.Expand
                              rootNode.SelectAction = TreeNodeSelectAction.Select
                              rootNode.NavigateUrl = null
                              docTreeView.Nodes.Add(rootNode)
 
                              foreach (SPFolder folder in folders)
                              {
                                      if (folder.Name != "Forms")
                                      {
                                              TreeNode parentNode = new TreeNode(folder.Name, folder.Name)
                                              parentNode.SelectAction = TreeNodeSelectAction.Expand
                                              parentNode.SelectAction = TreeNodeSelectAction.Select                                              
                                              rootNode.ChildNodes.Add(parentNode)
                                              getSubFolder(parentNode, folder)
                                              //files = folder.Files
                                      }
                              }                             
                              foreach (SPFile file in folders.Folder.Files)
                              {
                                      getChildNode(rootNode, file.Name)
                              }
                      }                     
              }
              protected void getSubFolder(TreeNode parentNode, SPFolder parentFolder)
              {
                      SPFolderCollection folders = parentFolder.SubFolders
                      foreach (SPFolder folder in folders)
                      {
                              if (folder.Name != "Forms")
                              {
                                      TreeNode newNode = new TreeNode(folder.Name, folder.Name)
                                      newNode.SelectAction = TreeNodeSelectAction.Expand
                                      newNode.SelectAction = TreeNodeSelectAction.Select                                    
                                      parentNode.ChildNodes.Add(newNode)                                      
                                      getSubFolder(newNode, folder)                                      
                              }
                      }
 
                      foreach (SPFile file in folders.Folder.Files)
                      {
                              getChildNode(parentNode, file.Name)
                      }
              }
             
              public void getChildNode(TreeNode node, string fileName)
              {
                      TreeNode newNode = new TreeNode(fileName, fileName)
                                             
                      newNode.SelectAction = TreeNodeSelectAction.Select
                      newNode.SelectAction = TreeNodeSelectAction.Select
                      node.ChildNodes.Add(newNode)                      
              }
              protected override void Render(HtmlTextWriter writer)
              {                     
                      docTreeView.RenderControl(writer)
              }
 
              public override EditorPartCollection CreateEditorParts()
              {
                      List< EditorPart> editors = new List< EditorPart> ()
                      editors.Add(new DocLibTreeViewToolPart())
                      return new EditorPartCollection(editors)
              }
      }
}
- Now right click on project file and click on Add à New Item… à Select code file. Give name DocLibTreeViewToolPart.cs and click ok.
- Now copy code and paste into this file.
using System
using System.Data
using System.Drawing
using System.Diagnostics
using System.ComponentModel
using System.Runtime.InteropServices
using System.Web.UI
using System.Web.UI.WebControls
using System.Xml.Serialization
using Microsoft.SharePoint
using Microsoft.SharePoint.Utilities
using Microsoft.SharePoint.WebControls
using System.Web.UI.WebControls.WebParts
using System.Reflection
 
namespace Apoweb.WebParts
{
      class DocLibTreeViewToolPart :EditorPart
      {
              DropDownList docDropDownList
              Label selectDocLabel
              DocLibTreeView docLibTW
 
              public DocLibTreeViewToolPart()
              {
                      this.ID = "DocLibTreeViewToolPart"
                      this.Title = "Document Library Tree View"
              }
 
              protected override void CreateChildControls()
              {
                      docLibTW = WebPartToEdit as DocLibTreeView
 
                      Table editorPartTable
                      TableRow editorPartTableRow
                      TableCell editorPartTableCell
 
                      //this.Load += new EventHandler(EPCGroupMiniCalToolPart_Load)
 
                      editorPartTable = new Table()
                      editorPartTable.ID = "DocLibTreeViewEditorTable"
                      Controls.Add(editorPartTable)
 
                      editorPartTableRow = new TableRow()
                      editorPartTableCell = new TableCell()
                      editorPartTable.Rows.Add(editorPartTableRow)
                      editorPartTableRow.Cells.Add(editorPartTableCell)
 
                      selectDocLabel = new Label()
                      selectDocLabel.Text = "Select a document:"
                      selectDocLabel.Font.Bold = true
                      selectDocLabel.Font.Underline = true
                      editorPartTableCell.Controls.Add(selectDocLabel)
 
                      // add Style Override Drop Down List
                      editorPartTableRow = new TableRow()
                      editorPartTableCell = new TableCell()
                      editorPartTable.Rows.Add(editorPartTableRow)
                      editorPartTableRow.Cells.Add(editorPartTableCell)
 
                      docDropDownList = new DropDownList()
                      docDropDownList.ID = "DocDropDownList"
                      docDropDownList.Items.Clear()
 
                      SPWeb currentWeb = SPControl.GetContextWeb(Context)
                      {
                              int i = 0
                              foreach (SPList list in currentWeb.Lists)
                              {
                                      if (list.BaseType == SPBaseType.DocumentLibrary)
                                      {
                                              docDropDownList.Items.Add(new ListItem(list.Title, list.Title))
                                             
                                              i++
                                      }
                              }
                      }
                      editorPartTableCell.Controls.Add(docDropDownList)
              }
              public override bool ApplyChanges()
              {
                      try
                      {
                              EnsureChildControls()
 
                              docLibTW = WebPartToEdit as DocLibTreeView
 
                              if (docLibTW!= null)
                              {
                                      try
                                      {                                                     
                                              docLibTW.DocName= docDropDownList.SelectedValue                                                      
                                      }
                                      catch (Exception exception)
                                      {
                                              this.Zone.ErrorText = "We encountered an unexpected error.  Your changes were not applied."
                                      }
                                      return true                                      
                              }
                      }
                      catch (Exception dexp)
                      {
 
                      }
                      return false
              }
              public override void SyncChanges()
              {                   
                      EnsureChildControls()
                      docLibTW = WebPartToEdit as DocLibTreeView
                      if (docLibTW != null)
                      {
                              docLibTW.DocName = docDropDownList.SelectedValue
                      }                     
              }
      }
}
- Now Build and Deploy. And enjoy….