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