Как сделать dojo treeGrid разделенным на две колонки?
У меня есть простой додзё treeGrid, который классифицируется только по первому столбцу. Но как сделать так, чтобы он был разделен на две категории? Обратите внимание, что treeGrid имеет итоги, показанные в каждой категории. Кроме того, есть ли способ перенести итоги на уровень категории, но не вниз?
var layout = [
{ cells: [
[ {field: "year", name: "Year"},
{field: "childItems",
children: [ { field: "unid", name: "unid", hidden: true},
{ field: "geography", name: "Geography"},
{ field: "country", name: "Coungtry"},
{ field: "status", name: "Status"},
{ field: "credit", name: "Credit"},
{ field: "debit", name: "Debit"}
],
aggregate: "sum"
}
]] } ]
var jsonStore = new dojo.data.ItemFileWriteStore({ url: <...............>});
var grid = new dojox.grid.TreeGrid({
structure: layout,
store: jsonStore,
query: {type: 'year'},
queryOptions: {deep: true},
rowSelector: true,
openAtLevels: [false],
autoWidth: true,
autoHeight: true
},
dojo.byId("treeGrid"));
grid.startup();
dojo.connect(window, "onresize", grid, "resize");
Пример магазина JSON:
{
"identifier": "id",
"label": "name",
"items": [
{
"id": "2018",
"type": "year",
"year": "2018",
"childItems": [
{
"id": "id0",
"geography": "Asia Pacific",
"country": "Australia",
"programname": "Program 1",
"totalPlanned": 0,
"totalForecasted": 0
},
{
.....
}
]
},
{
.....
}
]
}
1 ответ
Вы можете найти полностью рабочий пример здесь:
Теперь позвольте мне объяснить это:
Данные
Прежде всего, чтобы поддерживать несколько уровней в сетке, ваши данные должны быть в одном формате. Для дерева с n уровнями вам нужно иметь n-1 уровень группировки в ваших данных. Например, нижеприведенный объект JSON имеет 2 уровня группировки (год, география) для поддержки дерева с 3 уровнями (корень, родитель и потомок).
{
"identifier":"id",
"label":"name",
"items":[
{
"id":"2018",
"type":"year",
"year":"2018",
"geography":[
{
"id":"id1",
"geography":"Asia Pacific",
"childItems":[
{
"id":"ci1",
"country":"Australia",
"programname":"Program 1",
"credit":100,
"debit":50
}
]
}
]
}
]
}
раскладка
Чтобы отобразить дерево с n-уровнями, вы должны убедиться, что компоновка дерева правильно настроена с тем же вложением, что и ваши данные. Для поддержки структуры данных из объекта JSON выше, вам нужно установить макет:
[
{
cells:
[
[
{ field:"year", name:"Year" },
{
field:"geography",
children:
[
{ field:"geography", name:"Geography" },
{
field:"childItems",
children:[
{ field:"unid", name:"unid", hidden:true },
{ field:"country", name:"Country" },
{ field:"programname", name:"Program" },
{ field:"credit", name:"Credit" },
{ field:"debit", name:"Debit" }
],
aggregate:"sum",
},
]
}
]
]
}
]
Вы можете видеть, что для каждого дочернего уровня (уровней) вы должны добавить поле группы (как я хотел бы назвать это) и установить первое поле в этой группе на фактическое поле группы.
Я надеюсь, что этот пример очистит ваши сомнения. PS: в версии jsfiddle я использовал форматеры просто для того, чтобы скрыть агрегированные значения для строковых полей.