Ext Gantt Web甘特图--自定义任务树
GanttPanel中默认的设置很难满足客户多变需求,我们就针对一些常用的扩展做一个说明。
一般最常用的需求是,自定义多列,自定义行,自定义单元格等等。下面我们就分别来说明。
自定义列
GanttPanel的列配置对象,描述了表头、单元格、编辑器等重要配置。一般来说, 我们提供一个列配置对象,显示了“序号”、“任务名称”、“开始日期”、“完成日期”、“进度”等比较典型的列。 但是有时我们会显示更多的任务属性,例如,任务的部门,负责人,地点等等。
自定义列非常简单,只要在配置GanttPanel的列配置对象中多添加一个单元既可。见以下例子
1. var g = new Sch.gantt.GanttPanel({
2. // Setup your static columns
3. columns : [
4. {
5. header : 'Tasks',
6. sortable:true,
7. dataIndex : 'Name',
8. locked : true,
9. width:250,
10. editor : new Ext.form.TextField()
11. },{
12. header : '更多列1',
13. sortable:true,
14. width:50,
15. dataIndex : 'Other1',
16. locked : true
17. }
18. ],
19.
20. taskStore : taskStore,
21. dependencyStore : dependencyStore
22. });
运行后的软件截图如下
自定义行
自定义行的需求有很多,例如,在行中显示不同的文字颜色,定义行的背景高亮显示等等。 以下我们以在行中显示不同的文字颜色为例,说明如何定义不同的行。
关于行的配置,我们一般在viewConfig中配置。 viewConfig有一个回调函数叫做getRowClass,我们这个回调函数中返回整行的css类。具体代码如下。
1. viewConfig: {
2. getRowClass: function(r, idx, rowParams, ds) {
3. if (Sch.util.Date.getDurationInDays(r.get('StartDate'), r.get('EndDate')) > 7 && r.get('IsLeaf')) {
4. return 'processed-row';
5. }
6. }
7. },
以上的代码将任务时间超过7天的任务行的tr中添加了一个processed-row的类。下一步我们需要做的是在css中定义processed-row的样式。
1. <style type="text/css">
2. .processed-row td{
3. color: red;
4. font-size:11px;
5. }
6. </style>
任务时间超过7天的任务行就会以字体11px,红色显示。
自定义单元格
一个单元格的显示内容,取决于两点:
l dataIndex:如果配置了dataIndex,那么单元格默认显示行对象的dataIndex属性。
l renderer:如果有单元格渲染器,那么单元格会忽略掉dataIndex的显示功能,而只显示从renderer函数返回的HTML字符串。
其中,单元格渲染器函数renderer是最强大的单元格内容显示工具。通过renderer函数,您可以得知是哪一行、哪一列、单元格值,并且可以结合您系统的权限,返回不同的HTML内容。返回的HTML内容是任意的,可以是图片、超链接、按钮等。下面列举一个简单的例子。
1. {
2. header : '工期',
3. sortable:true,
4. width:50,
5. dataIndex : 'Duration',
6. renderer: function(v, m, r) {
7. var start = r.get('StartDate'),
8. end = r.get('EndDate');
9. if (start && end) {
10. var d = Math.round(Sch.util.Date.getDurationInDays(start, end));
11. if (d > 0) {
12. return d + '天';
13. }
14. }
15. },
16. locked : true,
17. },
自定义编辑器
如果需要快速编辑数据,就需要使用单元格编辑器。使用单元格编辑器的代码如下:
1. {
2. header : '完成时间',
3. sortable:true,
4. width:90,
5. dataIndex : 'StartDate',
6. locked : true,
7. editor : new Ext.form.DateField({
8. allowBlank : false,
9. format: 'Y/m/d'
10. })
11. }
单元格编辑器编辑时效果图如下:
编辑器只读事件
我们在平时的应用中,经常会控制甘特图的编辑权限。例如让甘特图为只读或部分只读。
控制整个甘特图只读非常简单,只需要下面一行语句就能控制。
1. gantt.setReadOnly(true);
在实际的应用中,往往要控制甘特图的某些行只读或者是某一个单元格只读,这时候我们需要编写beforeedit回调函数了。请看下面的例子。
1. listeners : {
2. beforeedit : function(e) {
3. if(e.record.get('PercentDone')>20){
4. return false;
5. }
6. }
7. }
这是一个beforeedit回调函数的简单例子。 beforeedit回调函数会在用户单击单元格之后,用户输入内容之前调用,如果返回false,则禁止在单元格中输入内容。 在以上的例子中, 任务完成百分比大于20%的任务都不能编辑。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述