指定列
网格的列通过 columns 参数进行配置。

// 默认列定义
gantt.config.columns = [
{ name: "text", label: "Task name", width: "*", tree: true },
{ name: "start_date", label: "Start time", align: "center" },
{ name: "duration", label: "Duration", align: "center" },
{ name: "add", label: "", width: 44 }
];
你可以查看描述如何为网格指定列的视频指南。
概览
默认情况下,网格包含 4 列:
- 任务名称
- 开始日期
- 持续时间
- “+” 列。具有
name="add"的特殊列,用于显示 “+” 符号,允许用户为任务添加子任务。
备注:在网格中显示默认列时,无需指定 columns 参数。
columns 参数是一个数组,其中每个对象表示一个单独的列。因此,例如,要在网格中定义 5 列:'Task', 'Start Date', 'End Date', 'Holder', 'Progress',请按如下方式指定 columns 参数:
gantt.config.columns = [
{ name: "text", label: "Task name", tree: true, width: "*" },
{ name: "holder", label: "Holder", align: "center" },
{ name: "start_date", label: "Start time", align: "center" },
{ name: "end_date", label: "End date", align: "center" },
{ name: "progress", label: "Progress", align: "center" }
];
gantt.init("gantt_here");
其中 'text', 'holder', 'start_date', 'end_date', 'progress' 是 数据属性的名称 的名称。
显示任务的结束日期
当任务数据对象包含以 "%Y-%m-%d" 或 "%d-%m-%Y"(即不包含时分部分)格式的开始和结束日期时,默认格式的结果日期可能不符合预期。有关结束日期格式的更多详细信息,请参阅 Task end date display & Inclusive end dates 指南条目。
对某些任务隐藏“Add”按钮
通过 CSS 隐藏 “Add” 按钮以防止用户向特定任务添加子任务,是一种相当简单的做法。
首先,使用 grid_row_class 模板为每个任务行分配一个 CSS 类:
gantt.templates.grid_row_class = ( start, end, task ) => {
if ( task.$level > 1 ) {
return "nested_task"
}
return "";
};
然后,为这样的行隐藏 “Add” 按钮:
.nested_task .gantt_add {
display: none !important;
}
相关示例: Predefined Project Structure
宽度
要设置列的宽度,请在相关列对象中使用 width 属性:
gantt.config.columns = [
{ name: "text", label: "Task name", width: "*", tree: true },
{ name: "start_date", label: "Start time", width: 150 },
{ name: "duration", label: "Duration", width: 120 }
];
gantt.init("gantt_here");
使用 '*' 值,使列占用剩余的所有空间。
注意,网格列的宽度取决于两个属性:列的 width 与 grid_width。如果列的宽度之和与网格的宽度不相等,Gantt 将修改其中一个参数。
- 当通过 gantt.init() 初始化 Gantt 时,width 是优先级最高的参数。
相关示例:初始化时列宽优先于网格宽度(Column width priority over grid width at initialization)
- 通过 gantt.render() 渲染时,grid_width 是优先级最高的参数。
相关示例:渲染时网格宽度优先于列宽(Grid width priority over column width during rendering)
- 通过 gantt.init() 初始化并且列宽未指定或设为
'*'时,grid_width 将成为优先值。
相关示例:初始化时列宽未定义或设为 '*' 时的网格宽度优先(Grid width priority when column width is undefined or set to '*' at initialization)
最小/最大列宽
可以使用 min_width/max_width 属性,在调整大小操作时限制列宽:
gantt.config.columns = [
{ name: "text", label: "Task name", width: "*", tree: true, min_width: 150, max_width: 300 },
{ name: "start_date", label: "Start time", width: 150 },
{ name: "duration", label: "Duration", width: 120 }
];
gantt.init("gantt_here");
列的 min_width 属性在优先级上高于 gantt 的 min_grid_column_width 属性。
调整大小时的最小网格宽度
通过 gantt.config.min_grid_column_width 选项定义网格可被调整到的最小宽度。该选项定义在调整网格宽度时每列可调整的最小宽度:
gantt.config.columns = [
{ name: "text", label: "Task name", width: 150, tree: true },
{ name: "start_date", label: "Start time", width: 100 },
{ name: "duration", label: "Duration", width: 50 }
];
gantt.config.min_grid_column_width = 30; // 网格最小宽度可以调整到 90 px
gantt.init("gantt_here");
相关示例: Minimal grid width
请注意,调整网格宽度时网格的最小宽度还取决于 'add' 列的最小宽度(默认为 44)。若要将网格调整到小于 44 px,请在 'add' 列对象中指定 min_width 选项:
{ name: "add", label: "", min_width: 1 }
数据映射与模板
默认情况下,dhtmlxGantt 使用与列名对应的数据属性来填充网格。例如,如果为某列设置 name:"holder",dhtmlxGantt 将在输入的 JSON 数据中查找相应的数据属性,如果存在,则将其加载到该列。