В этой статье вы узнаете, как устанавливать и изменять размеры для 3 разных элементов DataTable:
в 3 ситуациях (сценариях):
Использование размеров в таблицах также рассмотрено в туториалах Webix.
Ширина и высота таблицы должны устанавливаться как числовое значение. Использование строковых значений некорректно и приведет к ошибкам в логике.
webix.ui({
view:"datatable",
height:400,
width:300
});
По умолчанию DataTable подстраивается к размер родительского контейнера, что дает нам два способа установки фиксированного размера:
Установка фиксированного размера для DataTable
// способ 1
<div id="box" style="width:300px;height:400px;"></div>
webix.ui({
container:"box",
view:"datatable",
// конфигурация datatable
});
// способ 2
<div id="box"/>
webix.ui({
container:"box",
view:"datatable",
height:400,
width:300,
// другие настройки конфигурации
});
Related sample: Adjusting to the Parent Container
Related sample: Sizing through the 'Width', 'Height' Parameters
Фиксированная ширина столбца
По умолчанию ширина столбцов равна 100px и не может быть изменена с помощью пользовательского интерфейса.
Вы можете изменить значение для определенного столбца или всей таблицы.
Чтобы изменить размер определенного столбца, используйте:
Вы можете использовать следующие свойства, чтобы изменить все столбцы таблицы:
Установка разной ширины для столбцов
webix.ui({
view:"datatable",
columns:[
{ id:"title", header:"Film title" , width:80},
{ id:"title", header:"Release year" , maxWidth:100}
]
});
Изменение общей ширины для столбцов
webix.ui({
view:"datatable",
columnWidth:200,
columns:[
{ id:"title", header:"Film title"},
{ id:"title", header:"Release year"}
]
});
Относительные размеры
Если сумма значений ширины всех столбцов меньше ширины родительского контейнера, вы можете использовать атрибут fillspace, чтобы позволить одному из столбцов заполнить неиспользуемое свободное пространство.
Использование атрибута fillspace
webix.ui({
view:"datatable",
columns:[
{ id:"title", header:"Film title", fillspace:true},
// больше столбцов
]
});
Related sample: Adjusting Columns to the Parent Container
Для таблицы может быть установлено больше одного fillspace. Вы можете задать fillspace как число. Ширина таблицы будет пропорционально поделена между столбцами:
webix.ui({
view:"datatable",
columns:[
{ id:"id", header:"ID", fillspace:1},
{ id:"title", header:"Film title", fillspace:4}
]
});
В коде выше столбец title в 4 раза выше, чем столбец id, т.е их соотношение 20% к 80%.
Если вы хотите подстраивать ширину столбца под размер его содержимого, используйте атрибут adjust. Атрибут определяется для нужного столбца и может принимать следующие значения:
Подстраивание ширину столбца под ширину его содержимого
webix.ui({
view:"datatable",
columns:[
{ id:"title", header:"Film title", adjust:"data"},
{ id:"rank", header:"Rank", adjust:"header"},
{ id:"votes", header:"Votes", adjust:true}
// больше столбцов
]
})
Related sample: Adjusting Columns to the Content
Обратите внимание, итоговая ширина столбца после подстраивания не должна быть меньше значения minWidth и больше maxWidth, если они установлены.
Если у вас большой набор данных, вы можете ограничить число строк, которые примут участие в подсчете максимальной ширины столбца. Для этого применяется атрибут adjustBatch в конфигурации столбца. Свойство работает совместно с настройками adjust:"data" или adjust:true.
webix.ui({
rows:[
{ view:"datatable",
columns:[
{id:"id"},
{id:"title", adjust:"data", adjustBatch:50},
{id:"title", adjust:true}
],
//большой набор данных
data:grid_data
}
]
});
Чтобы установить фиксированную высоту для строки, используйте $height во время задания данных для загрузки в DataTable. Если вы задаете высоту таким образом, значения сохранятся независимо от других установленных параметров размера (например autoheight).
Вы также должны задать настройку fixedRowHeight:false для таблицы, чтобы избежать ошибок при прокрутке или размещении редакторов.
Установка разной высоты для строк
webix.ui({
view:"datatable",
fixedRowHeight:false,
data:[
{ $height:20, id:1, title:"The Shawshank Redemption", year:1994},
{ $height:40, id:2, title:"The Godfather", year:1972},
// другие поля данных
]
});
Related sample: Setting Custom Size for Rows
Авторазмер для родительского контейнера
DataTable автоматически подстраивается под размер родительского контейнера при условии, что автоматический размер содержимого не включен.
Чтобы позволить DataTable заполнить всю ширину, задайте fillspace хотя бы для одного из столбцов:
webix.ui({
view:"datatable",
columns:[
{ id:"title", header:"Film title", fillspace:true},
{ id:"year", header:"Year", width:100}
]
});
В этом случае столбец title будет подсчитан как ширина контейнера - 100.
Авторазмер для содержимого
Вы можете установите автоматический размер для ширины, высоты (или ширины и высоты), чтобы адаптировать DataTable к размеру его содержимого вертикально или горизонтально. Автоматический размер задается с помощью следующих параметров:
Автоматический размер для DataTable
webix.ui({
view:"datatable",
autoheight:true,
autowidth:true
});
Related sample: Height and Width Autosizing
Чтобы добавить возможность изменять размер столбцов (строк) с помощью мыши, используйте один из следующих параметров (или оба):
Добавление возможности изменять размер столбцов и строк с помощью мыши
webix.ui({
view:"datatable",
resizeColumn:true,
resizeRow:true
});
Для этих вариантов изменения размера существуют соответствующие события onRowResize и onColumnResize.
Related sample: Column and Row Resizing
В Material skin вам необходимо указать границы столбцов, чтобы визуализировать области ресайзинга, указав соответствующие классы CSS. Подробнее.
Чтобы определить область срабатывания ресайзинга, используйте параметр resizeRow или resizeColumn и передайте им объект со свойством size:
webix.ui({
view:"datatable",
resizeColumn: {size: 6},
resizeRow: {size: 6}
});
Related sample: Size of Resize Area
Еще одна возможность ресайзинга - это ограничение области срабатывания хедером таблицы.
Задайте параметер resizeRow или resizeColumn и передайте им объект с настройкой headerOnly:true:
webix.ui({
view:"datatable",
resizeColumn: {headerOnly:true},
resizeRow: {headerOnly:true}
});
Related sample: Resize within Header Only
Чтобы запретить менять ширину определённого столбца, укажите его свойству resize значение false:
webix.ui({
view:"datatable",
// разрешаем менять ширину столбцов
resizeColumn: true,
columns:[
// запрещаем менять ширину столбца "rank"
{ id:"rank", resize:false, header:"", css:"rank", width:50},
{ id:"title", header:"Film title", fillspace:true},
{ id:"year", header:"Year", width:80},
{ id:"votes", header:"Votes", width:100}
],
});
Related sample: Datatable: Deny Resizing for a Column
Для динамического ресайзинга элементов DataTable библиотека предлагает метод resize(). Когда вы измените размер определенного элемента и вызываете метод, вложенный (родительский) контейнер вызываемого элемента подстроится под новый размер.
Подстраивание родительского контейнера под размер the DataTable size
grid = webix.ui({
view:"datatable",
// конфигурация datatable
})
grid.define("width", 700);
grid.resize();
Related sample: Dynamic Adjusting to the Parent Container
В некоторых ситуациях вам может понадобится подстроить размер элемента к размеру внешнего родительского HTML-контейнера. Для этого вместо resize() используйте метод adjust():
Подстраивание DataTable к размеру родительского контейнера
var grid = webix.ui({
container:"box",
view:"datatable",
// конфигурация datatable
});
webix.toNode("box").style.width = "700px";
grid.adjust();
Related sample: Dynamic Adjusting to the Parent Container
Методы resize() и adjust() приводят к одному результату. Например, у вас есть DataTable, помещенный в контейнер 'div' c именем 'box'. Исходная высота DataTable - 50 px. Вам нужно увеличить ее до 80 px. Возможное решение представлено ниже:
Изображение | Код |
---|---|
|
|
|
Вы можете использовать обработчики событий для вызова упомянутых методов:
Подстраивание DataTable к размеру окна, в которое он помещен
webix.event(window, "resize", function(){
grid.adjust();
});
Related sample: Sizing and Events
Чтобы динамически адаптировать ширину столбца и высоту строки к размеру их содержимого, вы можете использовать соответствующее Datatable API.
Подстроить ширину столбца
Метод adjustColumn(id) подстраивает ширину указанных по ID столбцов.
Метод принимает два параметра:
datatable.adjustColumn("title");
datatable.adjustColumn("title", "header");
Режимы подстраивания:
Подстроить высоту строки
Метод adjustRowHeight(id) подстраивает высоту всех строк, основанную на содержимом ячеек к определенному столбцу или всем столбцам.
Метод может замедлить приложение.
Метод может принимать два параметра:
Установите значение false свойству fixedRowHeight для таблицы, иначе вы не получите визуального результаты работы метода.
webix.ui({
view:"datatable",
fixedRowHeight:false,
columns:[
{ id:"title", header:"Film title", fillspace:true},
{ id:"year", header:"Year", width:100}
]
});
// подстроить высоту каждой строки к
// к высоте ячейки столбца "title"
dtable.adjustRowHeight("title");
// подстроить высоту каждой строки к высоте самой высокой ячейки в ней
dtable.adjustRowHeight();
Высота строки подстраивается к:
Если вы хотите применить автоматический размер после загрузки страницы, вы можете использовать следующий код:
webix.ui({
view:"datatable",
columns:[
{ id:"rank", width:40, header:"", css:"rank"},
{ id:"title", width:380, header:"Film title" },
{ id:"year", width:160, header:"Released" },
{ id:"votes", width:120, header:"Votes" }
],
fixedRowHeight:false,
on:{
"onresize":webix.once(function(){
this.adjustRowHeight("title", true);
})
}
});
Related sample: Row Auto-Height
По умолчанию в DataTable включена прокрутка (вертикальная и горизонтальная). Чтобы ее отключить, используются параметры scrollY и scrollX.
Отключение вертикального скролла
webix.ui({
view:"datatable",
scrollY:false
});
Вы также можете установить прокрутку DataTable целыми строками, то есть вы не сможете прокручивать строки по длине. Для этого используйте параметр scrollAlignY:
Прокрутка целыми строками
webix.ui({
scrollAlignY:true
});
Related sample: Different Scrolling Behaviours
Наверх