欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2023/12/20 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C1.Win.C1GanttView.C1GanttView 甘特图使用经验:子任务 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

安装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
数据库保存及更新:数据量大,可能速度较慢,看数据关系及业务逻辑的复杂度
一般是不支持摘要任务和子任务的,完整版支持
~~
以上是最近试用该控件的心得,有兴趣的可以互相交流
~

总结

以上是生活随笔为你收集整理的C1.Win.C1GanttView.C1GanttView 甘特图使用经验:子任务的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。