C1.Win.C1GanttView.C1GanttView 甘特图使用经验:子任务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qiqingli/article/details/79401467

安装C1控件
在toolbox中添加tab,把C1控件放进工具箱,就可以和一般的Winform控件一起使用了。
本文记录一下使用:C1.Win.C1GanttView.C1GanttView 踩过的坑,
主要是没有考虑到:不支持子任务。
如果有用这个控件实现子任务的 谢谢分享一下!
以下主要是代码实现任务的初始化,及数据的转换
UI定制:
c1的甘特图,支持简单的界面定制,可以设置固定表头的颜色及边框;表格内容的颜色及边框;甘特图和列表的分离线样式以及甘特图bar的样式定制。

注意:C1甘特图的外边框 无法设置颜色,或者是没有找到设置颜色的入口,多外边框要求较高的需要想办法。

如下图样式可以很容易的实现:
这里写图片描述

缺点:外边框的颜色不受控制。

业务功能实现:
优点:只有一个层级的任务可以很容易实现
缺点:不支持子任务的分层显示

后台定义代码:
初始化数据:
1.清空原来数据 c1GVPlan.Tasks.Clear();
2.转换数据实体为task类型,task 支持自定义客户属性
Task task = ConvertToTask(plan, ref EndDate, ref StartDate);
c1GVPlan.Tasks.Add(task);
//设置项目的开始和结束日期
c1GVPlan.Project.StartDate = StartDate ?? DateTime.Now;

 自定义属性的设置:task.SetFieldValue("BAID", plan.BAID);
 自定义属性的读取:task.GetFieldValue("BAID", "");

3.添加前置任务或资源

  Predecessor _pre = new Predecessor();
                            Task preTask = gvPrjPlan.Tasks.Search(pre[0]);
                            if (preTask != null)
                            {
                                _pre.PredecessorTask = preTask;
                                _pre.PredecessorType = (PredecessorType)Enum.Parse(typeof(PredecessorType), pre[1], true);
                                _pre.Lag = double.Parse(pre[2]);
                                task.Predecessors.Add(_pre);
                            }

注意事项:task 一定要从现有grid中读取

新增编辑操作需要触发其他操作的,可以写在事件ListChane中

gvPrjPlan.Tasks.ListChanged += new ListChangedEventHandler(TasksResources_ListChanged);
 void TasksResources_ListChanged(object sender, ListChangedEventArgs e)
        {
        }

保存数据到数据库注意事项:
因为任务涉及到较多的互相之间的关系及资源,一般建议先清空数据库中的原有数据,然后把现在的grantview的tasks 保存进去。

难点:实体模型和task之前的类型转换,前置资源等
定制化的UI
数据库保存及更新:数据量大,可能速度较慢,看数据关系及业务逻辑的复杂度
一般是不支持摘要任务和子任务的,完整版支持
~~
以上是最近试用该控件的心得,有兴趣的可以互相交流
~

猜你喜欢

转载自blog.csdn.net/qiqingli/article/details/79401467