Перейти к основному содержимому

Сортировка столбцов

dhtmlxGantt позволяет сортировать данные в столбцах гридa (на стороне клиента).

Существует 2 способа задания сортировки в гриде:

  1. Одним кликом по заголовку столбца с включённым атрибутом sort;
  2. Через вызов API метода sort (его можно вызвать из какого-либо события или действия, например по клику кнопки или загрузке страницы).
заметка

Обратите внимание, что Gantt может сортировать задачи только по значениям из данных и не сортирует значения, заданные атрибутом шаблона столбца.

Сортировка по клику на заголовок

Как только пользователь кликает по заголовку, диаграмма Gantt начинает отображать специальный элемент управления, который показывает, по какому столбцу таблица в данный момент отсортирована и направление этой сортировки (возрастающая или убывающая). Каждое последующее нажатие на тот же заголовок будет менять направление сортировки.

gantt_sorting

Чтобы включить сортировку в диаграмме Gantt, установите свойство sort в true:

gantt.config.sort = true; 
gantt.init("gantt_here");

Встроенная сортировка

Программная сортировка

Чтобы отсортировать грид по какому-либо действию или событию (например, по клику кнопки или загрузке страницы), вызовите API метод 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>

Пользовательская функция сортировки

Сортировка по каждому столбцу грида

Можно задать для каждого конкретного столбца собственное правило сортировки. Наиболее распространённые три сценария сортировки для каждого столбца:

  1. отключение сортировки для столбца путём установки sort в false
gantt.config.columns[1].sort = false;
  1. сортировка столбца согласно предоставленным функциям сортировки путём установки sort в функцию
gantt.config.columns[1].sort = function(a,b){
return custom_function(a,b);
};

Пользовательская функция сортировки вызывается для пары объектов задачи (a и b) и возвращает 1, -1 или 0:

  • 1 - первый объект пары должен идти перед вторым;
  • -1 - второй объект идёт перед первым;
  • 0 - порядок обоих объектов не изменяется.
  1. сортировка столбца по значениям другого поля задачи путём установки sort в это поле
gantt.config.columns[1].sort = 'other_field';

Сортировка по нескольким полям

Вы можете сортировать грид диаграммы Gantt по нескольким свойствам (полям) с использованием пользовательской функции сортировки. В следующем примере данные сортируются по полям duration и priority:

let sortDirection = -1
function customSort() {
sortDirection *= -1;
gantt.sort(function (task1, task2) {
// сортировка по приоритету
if (task1.duration == task2.duration) {
return (task1.priority - task2.priority) * sortDirection
}
// сортировка по длительности
return (task1.duration - task2.duration) * sortDirection
});
}

Сортировка по нескольким свойствам (полям) с использованием пользовательской функции сортировки

  • В случае, если продолжительность задач одинакова, сортировка по этому полю не применяется, и задачи сортируются по полю priority.
  • Если продолжительность задач различается, грид будет отсортирован по свойству 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.