列排序
dhtmlxGantt 允许您在网格的列中对数据进行排序(在客户端完成)。
有两种方式可以在网格中提供排序:
注释
请注意,Gantt 只能按数据中的值对任务进行排序,而不会按列的模板属性设置的值进行排序。
通过单击列头进行排序
一旦用户单击列头,Gantt 图表将显示一个特殊控件,指示当前按哪个列进行排序以及排序方向(升序或降序)。 再次点击同一列头将反转排序方向。

要在 Gantt 图表中启用排序,请将 sort 属性设置为 true:
gantt.config.sort = true;
gantt.init("gantt_here");
编程排序
要在某个动作或事件(例如按钮点击或页面加载)对网格进行排序,请调用 sort 方法。
按钮点击时排序
<input type='button' value='Sort by task name' onclick='gantt.sort("text", true);'/>
<script type="text/javascript" charSet="utf-8">
gantt.init("gantt_here");
gantt.parse(tasks);
</script>
自定义排序函数
要将自定义排序函数应用于网格,请在调用 sort 方法时,将自定义函数的名称作为第一个(且唯一)参数传入。
自定义排序函数会针对每对相邻的值进行调用,并返回 1、-1 或 0:
- 1 - 对成对中第一个值的对象必须排在第二个之前;
- -1 - 第二个对象排在第一个对象之前;
- 0 - 两个对象的顺序不变。
使用自定义函数对 Gantt 图表进行排序
<input type='button' value='Sort by the number of holders'
onclick='sortByHolders(direction)'/>
<script type="text/javascript" charSet="utf-8">
var direction = false;
function sortByHolders(direction1){
direction = !direction;
gantt.sort(sortHolders);
};
function sortHolders(a,b){
a = a.users.length;
b = b.users.length;
if (direction){
return a>b?1:(a<b?-1:0);
} else {
return a>b?-1:(a<b?1:0);
}
};
</script>
每列网格排序
可以为每一列指定自定义排序规则。每列最常见的三种排序情景如下:
- 将 sort 设置为 false 以禁用某列的排序
gantt.config.columns[1].sort = false;
- 将 sort 设置为一个函数 based on the provided sorting functions,使某列按该函数进行排序
gantt.config.columns[1].sort = function(a,b){
return custom_function(a,b);
};
自定义排序函数对一对任务对象(a 和 b)进行调用并返回 1、-1 或 0:
- 1 - 对成对中第一个值的对象必须排在第二个之前;
- -1 - 第二个对象排在第一个对象之前;
- 0 - 两个对象的顺序不变。
- 将 sort 设置为任务的另一字段名,以按该字段的值对列进行排序
gantt.config.columns[1].sort = 'other_field';
按多个字段排序
您可以使用自定义排序函数按多个属性(字段)对 Gantt 图表的网格进行排序。 在下面的示例中,数据按 duration 和 priority 字段排序:
let sortDirection = -1
function customSort() {
sortDirection *= -1;
gantt.sort(function (task1, task2) {
// 按 priority 排序
if (task1.duration == task2.duration) {
return (task1.priority - task2.priority) * sortDirection
}
// 按 duration 排序
return (task1.duration - task2.duration) * sortDirection
});
}
- 当任务的 duration 相同时时,按该字段排序不会生效,任务将按 priority 字段排序。
- 如果任务的 duration 不同,网格将按 duration 属性排序。
Need help?
Got a question about the documentation? Reach out to our technical support team for help and guidance. For custom component solutions, visit the Services page.