Чтобы добавить хедеры и футеры в DataTable, используйте свойства header и footer соответственно:
{
view:"datatable",
header:true, // по умолчанию
footer:true,
// другие настройки
}
Вы можете настраивать хедеры и футеры с помощью атрибутов header и footer в параметре columns.
Хедер может быть:
Футер может быть:
Хедер и футер можно поворачивать и задавать для них любую высоту.
Испытайте свои силы в Webix Tutorials.
Чтобы создать простой (однострочный) хедер, задайте его строкой.
Эта строка может содержать:
Создание однострочного хедера
columns:[
// хедер как кнопка
{
id:"col1",
header:"<input type='button' value='Save' class='dummy_button'>"
},
// хедер как изображение
{ id:"col2", header:"<img src='../common/imdb.png'>"},
// хедер как текстовый ярлык
{ id:"col1", header:"Year"},
// хедер как ссылка
{ id:"col4", header:"<a href='http://google.com'>Link</a>"}
]
Related sample: Different Types of Content in the Header
Чтобы создать многострочный хедер, задайте его массивом строк.
Создание многострочного хедера
columns:[
{ id:"rank", header:["#"] },
{ id:"title", header:["Film title", "Second line"] },
{ id:"year", header:["Year"] },
{ id:"votes", header:["Votes"] }
]
Related sample: Multiline Header
Чтобы создать хедер, вмещающий в себе несколько столбцов или строк, определите хедер как объект или массив объектов. Объект хедера может содержать следующие свойства:
Чтобы создать хедер, вмещающий в себе два столбца или более, используйте свойство colspan:
Использование объединений столбцов
columns:[
{
id:"title",
header:[
"Film title",
{ text:"Sub-header", colspan:3 }
]
},
{ id:"year", header:["Year", ""]},
{ id:"votes", header:["Votes", ""]}
]
Related sample: Colspans and Rowspans in the Header
Чтобы создать хедер, вмещающий в себе две строки или более, используйте свойство rowspan:
Использование объединений строк
columns:[
{
id:"title",
header:[
{ text:"Film title", rowspan:2 }
]
},
{ id:"year", header:["Year", ""]},
{ id:"votes", header:["Votes", ""]}
]
Related sample: Colspans and Rowspans in the Header
Чтобы поместить фильтр в хедер, задайте его имя в свойстве content:
Использование фильтров в хедере
columns:[
{
id:"title",
header:[
"Film title",
{ content:"textFilter" }
]
},
{ id:"year", header:"Released"},
{ id:"votes", header:"Votes"}
]
Related sample: Filters in the Header
Подробнее о фильтрах в отдельной статье и Webix Tutorials.
Доступно для пользователей Webix Pro.
Встроенное меню хедера позволяет пользователю скрывать и показывать отдельные столбцы. Вот как это меню добавить:
{ view:"datatable", columns:[...], headermenu:true }
Related sample: Header Menu in the DataTable
Подробнее в отдельной статье.
Если необходимо скрыть хедеры, то это можно сделать, создав следующую функцию:
function toggleHeader(){
const grid = $$("grid");
grid.config.header = !grid.config.header;
grid.refreshColumns();
};
Вторая строка этой функции включает/выключает видимость хедера. Для этого мы инвертируем текущее значение grid.config.header. Если grid.config.header в данный момент true
, то оно станет false
, а если в данный момент false
, то оно станет true
. Затем, используя метод refreshColumns(), мы обновляем структуру таблицы, чтобы ее внешний вид и расположение отражали новое состояние видимости хедера.
Чтобы скрыть футеры, измените свойство grid.config.header на grid.config.footer и не забудьте после этого перерисовать datatable.
Related sample: Datatable: Hiding/Showing Headers
По умолчанию футеров у таблицы нет. Перед добавлением футеров для колонок включите настройку footer в настройках таблицы:
Добавить футер в DataTable
{
view:"datatable",
...
footer:true
}
Футеры настраиваются так же, как и хедеры:
Использование футеров
columns:[
// футер как кнопка
{id:"col1", footer:"<input type='button' value='Do something' class='dummy_button'>"},
// футер как изображение
{id:"col2", footer:"<img src='../common/imdb.png'>"},
// футер как текстовый ярлык
{id:"col1", footer:"Year"},
// футер как ссылка
{id:"col4", footer:"<a href='http://google.com'>Link</a>"}
]
Related sample: Standard Header (Footer) Implementation
Чтобы создать многострочный футер, задайте его массивом:
Создание многострочного футера
columns:[
{ id:"rank", footer:["Total", "Second line"]},
{ id:"title", footer:[""]},
{ id:"year", footer:[""]},
{ id:"votes", footer:["12547"]}
]
Сложный футер должен быть задан как объект со следующими параметрами:
Объединения столбцов в футере
columns:[
{
id:"rank",
footer:{ text:"Total", colspan:3 }
},
{ id:"title", ...},
{ id:"year", ...},
{ id:"votes", footer:"12547"}
]
Чтобы добавить счетчик итоговой суммы всех значений столбца, задайте имя счетчика - summColumn в параметре content:
Использование счетчика в футере
columns:[
{
id:"rank",
header:"",
footer:{ text:"Total:", colspan:3 }
},
{ id:"title", header:"Film title" },
{ id:"year", header:"Released" },
{
id:"votes",
header:"Votes",
footer:{ content:"summColumn" }
}
]
Related sample: Counter in the Footer
Доступно для пользователей Webix Pro.
Чтобы перевернуть хедер или футер, укажите его как объект (или массив объектов, если это многострочный хедер/футер). Высота будет скорректирована в соответствии с размером текста.
columns:[
{ id:"year",
header:{ text:"Released", rotate:true },
footer:{ text:"Footer", rotate:true }
}
]
Чтобы изменить высоту, задайте хедер/футер как объект и используйте свойство height :
columns:[
{
id:"title",
header:{ text:"Film title", height:25 },
footer:{ text:"80px footer", height:80 }
}
]
Related sample: Custom Height for Header Lines
Также вы можете включить автоматическую высоту для хедера и футера в таблице. Высота будет подстраиваться под содержимое.
Для этого задайте хедер или футер как объект и установите настройку autoheight:true:
columns:[
{
id:"title",
header:{
text:"A multiline header for a film title column..",
autoheight:true
},
footer: {
text:"A multiline footer for a film title column..",
autoheight:true
},
}
]
Related sample: Auto Height for Header Lines
Эта настройка также работает для перевернутых хедеров/футеров:
columns:[
{ id:"title"},
{ id:"year", header:{ text:"Released", autoheight:true, rotate:true }},
{ id:"votes", header:{ text:"Votes", rotate:true}}
]
Related sample: Header Rotate::Autoheight
Все элементы содержимого для хедера или футера таблицы хранятся в объекте webix.ui.datafilter. Для всех элементов предусмотрен одинаковый паттерн конфигурации.
Для всех элементов применимы два метода:
Параметры включают в себя:
Вы также можете расширить или переопределить функциональность существующих элементов контента или создать новый элемент.
summColumn - счетчик, который может быть добавлен к футеру. Он суммирует все значения в столбце и отображает результат.
Чтобы создать ваш собственный счетчик/аггрегатор, вы можете дополнить summColumn и переопределить его метод refresh(). Например, давайте создадим avgColumn, который будет подсчитывать средние значения:
webix.ui.datafilter.avgColumn = webix.extend({
refresh:function(master, node, value){
var result = 0;
master.mapCells(null, value.columnId, null, 1, function(value){
value = value * 1;
if (!isNaN(value))
result += value;
return value;
});
node.innerHTML = Math.round(result / master.count());
}
}, webix.ui.datafilter.summColumn);
Любой элемент контента должен поддерживать следующие методы (объявляйте их, даже если не планируете работать с ними):
Также вы можете задавать другие методы, свойства и вызывать события.
webix.ui.datafilter.customFilterName = {
getValue:function(){}, // неиспользуемые методы
setValue: function(){},
refresh: function(master, node, column){
// обработчики события
node.onchange = function(){...};
node.onclick = function(){...}
},
render:function(master, column){
var html = "...";
return html;
}
};
У элемента контента могут быть следующие свойства:
Related sample: Custom Content for Header and Footer
Чтобы встроить фильтр в хедер таблицы, необходимо выполнить следующие шаги:
1. Задать новый фильтр в объекте datafilter, чтобы интегрировать его с хедером и добавить для него инпут.
2. Задать метод getValue(), который вернет значение для инпута.
3. Использовать метод refresh(), чтобы обеспечить логику фильтрации в динамике.
Внутри метода вам нужно зарегистрировать добавленный фильтр и задать обработчик, который вызовет метод filterbyAll().
4. Применить метод render(), чтобы отрисовать новый фильтр:
webix.ui.datafilter.customFilterName = {
getInputNode:function(node){
return node ? node.firstChild : { value:"" };
},
setValue:function(node, value){
this.getInputNode(node).value = value.toString();
},
// возвращает параметр фильтрации
getValue:function(node){
return this.getInputNode(node).value;
},
refresh: function(master, node, columnObj){
// объявляет встроенный фильтр данных
master.registerFilter(node, columnObj, this);
// событие запускающее фильтрацию
node.querySelector("input").onkeyup = function(){
master.filterByAll()
}
},
render:function(master, column){
var html = "<input type='text' style='width:100%' id='cb1'>";
return html;
}
};
5. Указать новый фильтр как значение свойства content атрибута header:
webix.ui({
view:"datatable",
columns:[
{
id:"title",
header:[ { content:"customFilterName" } ],
fillspace:1
},
{
id:"year",
header:[ { content:"textFilter" } ],
fillspace:1
}
],
data:grid_data
});
В примере выше мы добавили два фильтра в хедер таблицы: стандартный и пользовательский. Данные будут перефильтрованы каждый раз, когда изменится значение в любом из фильтров.
Наверх