zoukankan      html  css  js  c++  java
  • KS Gantt甘特图控件通过递归加载无限层级的数据

    从服务器拉下来的数据,是反序列后的对象数据,通过id和parentid可以组织成对象树,然后将对象树绑定到甘特图控件上。

        public class KSGanttHelper
        {
            #region 往界面添加项
            public static void FillDataToGanttControl(List<ConstructionTaskItemTree> taskItemTreeList, Gantt gantt)
            {
                gantt.SuspendItemLayout();
                taskItemTreeList.ForEach((taskItemTree) =>
                {
                    if (taskItemTree.Children.Any())
                    {
                        GroupItem rootGroup = gantt.AddGroup(taskItemTree.Item.name);
                        SetGroupProperty(rootGroup, taskItemTree.Item);//设置其他属性值
                        GetChildTaskItem(taskItemTree, rootGroup, gantt);
                    }
                    else
                    {
                        TaskItem taskItem = gantt.AddTask(DateTime.Parse(taskItemTree.Item.startDate), DateTime.Parse(taskItemTree.Item.endDate), taskItemTree.Item.name);
                        SetTaskProperty(taskItem, taskItemTree.Item);
                    }
                });
                gantt.ResumeItemLayout();
            }
    
            private static void GetChildTaskItem(ConstructionTaskItemTree taskTree, GroupItem parentGroup, Gantt gantt)
            {
                foreach (ConstructionTaskItemTree childItem in taskTree.Children)
                {
                    if (childItem.Children.Any())
                    {
                        GroupItem group = gantt.AddGroup(childItem.Item.name);
                        SetGroupProperty(group, childItem.Item);//设置其他属性
                        GetChildTaskItem(childItem, group, gantt);
                        parentGroup.AddChild(group);
                    }
                    else
                    {
                        TaskItem childTaskItem = gantt.AddTask(DateTime.Parse(childItem.Item.startDate), DateTime.Parse(childItem.Item.endDate), childItem.Item.name);
                        SetTaskProperty(childTaskItem, childItem.Item);
                        parentGroup.AddChild(childTaskItem);
                    }
                }
            }
    
            /// <summary>
            /// 绑定实体的属性到界面分组项上
            /// </summary>
            /// <param name="groupItem"></param>
            /// <param name="constructionTaskItem"></param>
            private static void SetGroupProperty(GroupItem groupItem, ConstructionTaskItem constructionTaskItem)
            {
                groupItem.SetProperty("wbs", constructionTaskItem.wbs);
                groupItem.SetProperty("id", constructionTaskItem.id);
                groupItem.SetProperty("hasModel", constructionTaskItem.hasModel);
            }
    
            private static void SetTaskProperty(TaskItem taskItem, ConstructionTaskItem constructionTaskItem)
            {
                taskItem.SetProperty("wbs", constructionTaskItem.wbs);
                taskItem.SetProperty("id", constructionTaskItem.id);
                taskItem.SetProperty("hasModel", constructionTaskItem.hasModel);
            }
            #endregion 往界面添加项
    
            #region 转换数据
            /// <summary>
            /// 将返回的数据对象转换成树结构的对象
            /// </summary>
            /// <param name="constructionTaskRootModel"></param>
            /// <returns></returns>
            public static List<ConstructionTaskItemTree> TaskRootModel2ConstructionTaskItemTree(ConstructionTaskRootModel constructionTaskRootModel)
            {
                List<ConstructionTaskItemTree> taskUITreeList = new List<ConstructionTaskItemTree>();
                if (constructionTaskRootModel == null)
                {
                    return taskUITreeList;
                }
    
                if (constructionTaskRootModel.data.Any())
                {
                    var rootTaskItemList = constructionTaskRootModel.data.Where(h => h.parentId == "0").ToList();
                    rootTaskItemList.ForEach((h) =>
                    {
                        ConstructionTaskItemTree rootTreeItem = new ConstructionTaskItemTree();
                        rootTreeItem.Item = h;
                        rootTreeItem.Parent = null;
                        var childItemList = constructionTaskRootModel.data.Where(r => r.parentId.Equals(h.id)).ToList();
                        childItemList.ForEach((k) =>
                        {
                            ConstructionTaskItemTree childTreeItem = new ConstructionTaskItemTree();
                            childTreeItem.Item = k;
                            childTreeItem.Parent = rootTreeItem;
                            rootTreeItem.Children.Add(childTreeItem);
                            GetChildTreeItem(childTreeItem, k, constructionTaskRootModel);
                        });
    
                        taskUITreeList.Add(rootTreeItem);
                    });
                }
                return taskUITreeList;
            }
    
            private static void GetChildTreeItem(ConstructionTaskItemTree parentTreeItem, ConstructionTaskItem taskItem, ConstructionTaskRootModel constructionTaskRootModel)
            {
                var childItemList = constructionTaskRootModel.data.Where(r => r.parentId.Equals(taskItem.id)).ToList();
                childItemList.ForEach((k) =>
                {
                    ConstructionTaskItemTree childTreeItem = new ConstructionTaskItemTree();
                    childTreeItem.Item = k;
                    childTreeItem.Parent = parentTreeItem;
                    parentTreeItem.Children.Add(childTreeItem);
                    GetChildTreeItem(childTreeItem, k, constructionTaskRootModel);
                });
            }
            #endregion 转换数据
        }
    
        public class ConstructionTaskItemTree
        {
            public ConstructionTaskItemTree Parent { get; set; }
            public ConstructionTaskItem Item { get; set; }
            public List<ConstructionTaskItemTree> Children { get; set; } = new List<ConstructionTaskItemTree>();
        }
    public class ConstructionTaskItem
        {
            /// <summary>
            /// 
            /// </summary>
            public string id { get; set; }
            /// <summary>
            /// 石围塘站
            /// </summary>
            public string name { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string code { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string createUserId { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string createDate { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string editUserId { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string editDate { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string deleteFlag { get; set; }
            /// <summary>
            /// 地下三层车站
            /// </summary>
            public string memo { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string projectId { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string parentId { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string taskId { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string beforeTask { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string wbs { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string organizationId { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string startDate { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string endDate { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string duration { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string modelList { get; set; }
            /// <summary>
            /// 是否完成 1.未完成,2.完成
            /// </summary>
            public int isComplete { get; set; }
            /// <summary>
            /// 是否关联模型1.未关联,2.关联
            /// </summary>
            public int hasModel { get; set; }
        }
    
        public class ConstructionTaskRootModel
        {
            /// <summary>
            /// 
            /// </summary>
            public StateModel state { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public List<ConstructionTaskItem> data { get; set; }
        }
    You can reach me by surfing the web ---- huntjobs.cn,or sending e-mails to me,Here is my qq MailBox:1424870395@qq.com
  • 相关阅读:
    管理员必备的Linux系统监控工具
    kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
    RedHat linux配置yum本地资源
    RedHat Linux RHEL6配置本地YUM源
    c语言中的fgets函数
    sprintf()函数的用法
    spring boot整合JWT例子
    spring boot 自定义过滤器链
    (转)ArrayList和LinkedList的几种循环遍历方式及性能对比分析
    (转)Springboot 中filter 注入对象
  • 原文地址:https://www.cnblogs.com/HedgehogBlog/p/7495332.html
Copyright © 2011-2022 走看看