Sunday 12 February 2017

Binding Tree view in Asp.net MVC

Welcome to my blog.....
In this articles we discuss how to bind the  tree structure in asp.net MVC using bootstrap  through
programmatically.

In this article i'm considering a scenario, for an organization building project management hierarchy.
From below screen shot, PorfolioManager is the top level node and this hierarchy drill downs till team leader and team member.

.








Source Code: 
View: 

1. Jquery
2. Bootstrap
Above two , you can  refer from CDN

3. BootstrapTreetables.css can download from bootstraptreetable.css
                 
JS/CSS
 <script src="~/scripts/CustomContent/script/jquery-1.10.2.min.js"></script>    <link href="~/scripts/CustomContent/css/bootstrap.min.css" rel="stylesheet"></link>    <link href="~/scripts/CustomContent/css/BootstrapTreetable.css" rel="stylesheet"></link>
    <style>            .tree li:last-child::before {                height: 100% !important;            }
            .tree {                padding: 0px !important;            }
            #myPortfolio {                width: 100% !important;            }    </style>
<script type ="text/javascript">    $(document).ready(function () {
    varselectedparentnode = null;
    $('.tree li:has(ul)').addClass('parent_li').find(' > span').attr('title', 'Expand this branch');    $('.tree li ul>li').hide();

    $('.tree li.parent_li> span').on('click', function (e) {    var children = $(this).parent('li.parent_li').find(' >ul> li');    if (children.is(":visible")) {    children.hide('fast');    $(this).attr('title', 'Expand this branch').find(' >i').addClass('icon-plus-sign').removeClass('icon-minus-sign');    } else {    children.show('fast');    $(this).attr('title', 'Collapse this branch').find(' >i').addClass('icon-minus-sign').removeClass('icon-plus-sign');    }    e.stopPropagation();    });    });
  </script>

HTML: 


<h2> Binding tree structure Hirearchy </h2>

<div class="col-md-6">
    <div class="tree well">
        @if (ViewData["PortfolioHierarchy"] != null)
        {
            @Html.Raw(@ViewData["PortfolioHierarchy"]);
        }
    </div>
</div>

<div class="col-md-6">
    <div>

    </div>
</div>

C# code:


Entity Model


namespace EntityModels
{
    public class PortfolioHierarchy
    {
        public int PortfolioID { get; set; }
        public string PortfolioName { get; set; }

        public int ProgramID { get; set; }
        public string ProgramName { get; set; }

        public int ProjectID { get; set; }
        public string ProjectName { get; set; }

        public int ProjectManagerID { get; set; }
        public string ProjectManagerName { get; set; }

        public int TeamLeaderID { get; set; }
        public string TeamLeaderName { get; set; }

        public int TeamMemberID { get; set; }
        public string TeamMemberName { get; set; }


    }
}
Controller
public class PortfolioHierarchyController : Controller    {        // GET: PortfolioHierarchy        public ActionResult Index()        {            string strHierarchy = CreatePortfolioNode(GetPortfolioData());
            ViewData["PortfolioHierarchy"] = strHierarchy;            return View();        }


        private string CreatePortfolioNode(List<PortfolioHierarchy> lstPortfoliohierarchy)        {          StringBuilder strHierarchy = new StringBuilder();            foreach (var _portfolio in lstPortfoliohierarchy.Select(x => new { x.PortfolioID, x.PortfolioName }).Distinct())            {                strHierarchy.Append("<ul><li>");                strHierarchy.Append("<span id=" + _portfolio.PortfolioID + "><i class=icon-plus-sign></i>");                strHierarchy.Append(_portfolio.PortfolioName);                strHierarchy.Append("</span>");
                string strProgramNode = CreateProgramNode(lstPortfoliohierarchy, _portfolio.PortfolioID);                if (!string.IsNullOrEmpty(strProgramNode))                {                    strHierarchy.Append(strProgramNode);                }
                strHierarchy.Append("</li></ul>");            }
            return strHierarchy.ToString();        }
        private string CreateProgramNode(List<PortfolioHierarchy> _lstPortfoliohierarchy, int portfolioid)        {            StringBuilder strProgramHierarchy = new StringBuilder();            foreach (var _program in _lstPortfoliohierarchy.Where(x => x.PortfolioID == portfolioid).Select(x => new { x.ProgramID, x.ProgramName }).Distinct())            {                strProgramHierarchy.Append("<ul><li>");                strProgramHierarchy.Append("<span id=" + _program.ProgramID + "><i class=icon-plus-sign></i>");                strProgramHierarchy.Append(_program.ProgramName);                strProgramHierarchy.Append("</span>");
                string strProjectNode = CreateProjectNode(_lstPortfoliohierarchy, _program.ProgramID, portfolioid);                if (!string.IsNullOrEmpty(strProjectNode))                {                    strProgramHierarchy.Append(strProjectNode);                }
                strProgramHierarchy.Append("</li></ul>");
            }
            return strProgramHierarchy.ToString();
        }
        private string CreateProjectNode(List<PortfolioHierarchy> _lstPortfoliohierarchy, int ProgramID, int portfolioid)        {            StringBuilder strprojectHierarchy = new StringBuilder();            foreach (var _project in _lstPortfoliohierarchy.Where(x => x.PortfolioID == portfolioid && x.ProgramID == ProgramID).Select(x => new { x.ProjectID, x.ProjectName }).Distinct())            {                strprojectHierarchy.Append("<ul><li>");                strprojectHierarchy.Append("<span id=" + _project.ProjectID + "><i class=icon-plus-sign></i>");                strprojectHierarchy.Append(_project.ProjectName);                strprojectHierarchy.Append("</span>");
                string strProjectNode = CreateProjectManagerNode(_lstPortfoliohierarchy, _project.ProjectID, ProgramID, portfolioid);                if (!string.IsNullOrEmpty(strProjectNode))                {                    strprojectHierarchy.Append(strProjectNode);                }
                strprojectHierarchy.Append("</li></ul>");
            }
            return strprojectHierarchy.ToString();        }
        private string CreateProjectManagerNode(List<PortfolioHierarchy> _lstPortfoliohierarchy, int projectid, int ProgramID, int portfolioid)        {
            StringBuilder strprojectManagerHierarchy = new StringBuilder();            foreach (var _projectmanager in _lstPortfoliohierarchy.Where(x => x.PortfolioID == portfolioid && x.ProgramID == ProgramID && x.ProjectID == projectid).Select(x => new { x.ProjectManagerID, x.ProjectManagerName }).Distinct())            {                strprojectManagerHierarchy.Append("<ul><li>");                strprojectManagerHierarchy.Append("<span id=" + _projectmanager.ProjectManagerID + "><i class=icon-plus-sign></i>");                strprojectManagerHierarchy.Append(_projectmanager.ProjectManagerName);                strprojectManagerHierarchy.Append("</span>");
                string strTeamLeaderNode = CreateTeamLeaderNode(_lstPortfoliohierarchy, _projectmanager.ProjectManagerID, projectid, ProgramID, portfolioid);                if (!string.IsNullOrEmpty(strTeamLeaderNode))                {                    strprojectManagerHierarchy.Append(strTeamLeaderNode);                }
                strprojectManagerHierarchy.Append("</li></ul>");
            }
            return strprojectManagerHierarchy.ToString();

        }
        private string CreateTeamLeaderNode(List<PortfolioHierarchy> _lstPortfoliohierarchy, int projectmanagerid, int projectid, int ProgramID, int portfolioid)        {
            StringBuilder strTeamleaderHierarchy = new StringBuilder();            foreach (var _teamleader in _lstPortfoliohierarchy.Where(x => x.PortfolioID == portfolioid && x.ProgramID == ProgramID && x.ProjectID == projectid && x.ProjectManagerID == projectmanagerid).Select(x => new { x.TeamLeaderID, x.TeamLeaderName }).Distinct())            {                strTeamleaderHierarchy.Append("<ul><li>");                strTeamleaderHierarchy.Append("<span id=" + _teamleader.TeamLeaderID + "><i class=icon-plus-sign></i>");                strTeamleaderHierarchy.Append(_teamleader.TeamLeaderName);                strTeamleaderHierarchy.Append("</span>");
                string strTeamLeaderNode = CreateTeamNode(_lstPortfoliohierarchy, _teamleader.TeamLeaderID, projectmanagerid, projectid, ProgramID, portfolioid);                if (!string.IsNullOrEmpty(strTeamLeaderNode))                {                    strTeamleaderHierarchy.Append(strTeamLeaderNode);                }
                strTeamleaderHierarchy.Append("</li></ul>");            }
            return strTeamleaderHierarchy.ToString();
        }
        private string CreateTeamNode(List<PortfolioHierarchy> _lstPortfoliohierarchy, int teamleaderid, int projectmanagerid, int projectid, int ProgramID, int portfolioid)        {
            StringBuilder strTeamHierarchy = new StringBuilder();            foreach (var _team in _lstPortfoliohierarchy.Where(x => x.PortfolioID == portfolioid && x.ProgramID == ProgramID && x.ProjectID == projectid && x.ProjectManagerID == projectmanagerid && x.TeamLeaderID == teamleaderid).Select(x => new { x.TeamMemberID, x.TeamMemberName }).Distinct())            {                strTeamHierarchy.Append("<ul><li>");                strTeamHierarchy.Append("<span id=" + _team.TeamMemberID + "><i class=icon-leaf></i>");                strTeamHierarchy.Append(_team.TeamMemberName);                strTeamHierarchy.Append("</span>");                strTeamHierarchy.Append("</li></ul>");            }
            return strTeamHierarchy.ToString();
        }
        private List<PortfolioHierarchy> GetPortfolioData()        {            PortfolioHierarchy objportfolio;            List<PortfolioHierarchy> lstPortfolio = new List<PortfolioHierarchy>();            objportfolio = new PortfolioHierarchy();            objportfolio.PortfolioID = 1;            objportfolio.PortfolioName = "Portfolio : Heavy machineries and Medical Equipment";
            objportfolio.ProgramID = 1;            objportfolio.ProgramName = "Program : Heavy machineries";
            objportfolio.ProjectID = 1;            objportfolio.ProjectName = "Project : General Motor";
            objportfolio.ProjectManagerID = 1;            objportfolio.ProjectManagerName = "ProjectManager : Mike";
            objportfolio.TeamLeaderID = 4;            objportfolio.TeamLeaderName = "TeamLeader : Justin";
            objportfolio.TeamMemberID = 8;            objportfolio.TeamMemberName = "TeamMember :Anne";
            lstPortfolio.Add(objportfolio);

            objportfolio = new PortfolioHierarchy();            objportfolio.PortfolioID = 1;            objportfolio.PortfolioName = "Portfolio : Heavy machineries and Medical Equipment";
            objportfolio.ProgramID = 1;            objportfolio.ProgramName = "Program : Heavy machineries";
            objportfolio.ProjectID = 1;            objportfolio.ProjectName = "Project : General Motor";
            objportfolio.ProjectManagerID = 1;            objportfolio.ProjectManagerName = "Mike";
            objportfolio.TeamLeaderID = 5;            objportfolio.TeamLeaderName = "TeamLeader : Ryno";
            objportfolio.TeamMemberID = 7;            objportfolio.TeamMemberName = "TeamMember : subhash";
            lstPortfolio.Add(objportfolio);
            objportfolio = new PortfolioHierarchy();            objportfolio.PortfolioID = 1;            objportfolio.PortfolioName = "Portfolio : Heavy machineries and Medical Equipment";
            objportfolio.ProgramID = 2;            objportfolio.ProgramName = "Program : Medical Equipment";
            objportfolio.ProjectID = 2;            objportfolio.ProjectName = "Project : GE HealthCare";
            objportfolio.ProjectManagerID = 2;            objportfolio.ProjectManagerName = "ProjectManager:Charles";
            objportfolio.TeamLeaderID = 6;            objportfolio.TeamLeaderName = "TeamLeader: Michael";
            objportfolio.TeamMemberID = 9;            objportfolio.TeamMemberName = "Satish";            lstPortfolio.Add(objportfolio);
            return lstPortfolio;
        }    }

Download the source code : Click here

No comments:

Post a Comment