Вы кодируете небольшие простые ошибки, но основная проблема, с которой вы сталкиваетесь, заключается в том, что ваш код сделан для добавления простых строк, а не узлов дерева.Вы можете перейти на официальную демонстрационную страницу и выбрать в разделе «Новое в версии 3.4» демо «Модель смежности с сеткой деревьев».
Я написал демонстрационную версию , которая работаетточно так же, как демо из демо со страницы демона trirand, но используйте только локальные данные :
В вашем случае вам нужно расширить объекты изmydata
со свойствами level
, parent
, isLeaf
, expanded
:
var mydata = [
{id:"1",Name:"Main Menu",MenuId:"1",MenuName:"Menu1",
level:"0", parent:"", isLeaf:false, expanded:false},
{id:"1_1",Name:"Sub Menu",MenuId:"1",MenuName:"Menu1",
level:"1", parent:"1", isLeaf:false, expanded:false},
{id:"1_1_1",Name:"Sub Sub Menu",MenuId:"1",MenuName:"Menu1",
level:"2", parent:"1_1", isLeaf:true, expanded:false},
{id:"1_2",Name:"Sub Menu1",MenuId:"1",MenuName:"Menu1",
level:"1", parent:"1", isLeaf:true, expanded:false},
{id:"2",Name:"Main Menu1",MenuId:"2",MenuName:"Menu2",
level:"0", parent:"", isLeaf:false, expanded:true},
{id:"2_1",Name:"Main Menu",MenuId:"2",MenuName:"Menu2",
level:"1", parent:"2", isLeaf:true, expanded:false},
{id:"2_2",Name:"Main Menu",MenuId:"2",MenuName:"Menu2",
level:"1", parent:"2", isLeaf:true, expanded:false},
{id:"3",Name:"Main Menu2",MenuId:"3",MenuName:"Menu3",
level:"0", parent:"", isLeaf:false, expanded:false},
{id:"3_1",Name:"Main Menu",MenuId:"3",MenuName:"Menu3",
level:"1", parent:"3", isLeaf:true, expanded:false},
{id:"3_2",Name:"Main Menu",MenuId:"3",MenuName:"Menu3",
level:"1", parent:"3", isLeaf:true, expanded:false}
];
Здесь я изменил немного значений идентификатора, потому что точки не должны использоваться в идентификаторах.Кроме того, я установил expanded
статус «Главного меню1» на true
, чтобы продемонстрировать только то, что вы можете автоматически развернуть некоторые узлы сразу после загрузки.
Я изменил определение jqGrid для следующего
$("#treegridsamp").jqGrid({
datatype: "local",
data: mydata, // will not used at the loading,
// but during expanding/collapsing the nodes
colNames:['id','Name','MenuId','Menu Name'],
colModel:[
{name:'id',index:'id',width:100,hidden:true},
{name:'Name',index:'Name',width:150},
{name:'MenuId',index:'MenuId',width:100},
{name:'MenuName',index:'MenuName',width:100}
],
height:'auto',
//pager : "#ptreegrid",
sortname: 'id',
treeGrid: true,
treeGridModel: 'adjacency',
treedatatype: "local",
ExpandColumn: 'Name',
caption: "Sample Tree View Model"
});
Я сделал скрытый столбец id и уменьшил размер сетки.Для добавления данных я использовал метод addJSONData
, поскольку он установит узлы дерева
$("#treegridsamp")[0].addJSONData({
total: 1,
page: 1,
records: mydata.length,
rows: mydata
});
В результате вы получите
Вы можете увидетьдемо live здесь .
ОБНОВЛЕНО : Если вы используете jqGrid версии 4.0 или выше, важно установить свойство loaded:true
для узлов дерева, если вы хотите иметьрасширен.Например, в приведенном выше примере элемент «Главное меню1» является узлом (isLeaf:false
), который должен отображаться развернутым (expanded:true
), поэтому для определения элемента следует добавить loaded:true
:
{id:"2", Name:"Main Menu1", MenuId:"2", MenuName:"Menu2",
level:"0", parent:"", isLeaf:false, expanded:true, loaded:true}
Дополнительные примеры см. здесь , здесь , здесь и здесь .
ОБНОВЛЕНО 2 : для правильной сортировки необходимо использовать parent:null
или parent:"null"
вместо parent:""
, см. здесь для получения более подробной информации.