Jqgrid Tree View Adjacencey - PullRequest
       17

Jqgrid Tree View Adjacencey

4 голосов
/ 16 марта 2011

Я использую модель Jqgrid Tree View в приложении ma, и я вижу, что она показывает ошибку, поскольку объект или свойство не поддерживается. Я включил grid.Treeview.js и другой файл сценария Jqgrid.Я не знаю, в чем может быть проблема.И когда я проверил образец приложения в сети для просмотра дерева смежности, и я попробовал то же самое, но в asp.net с локальными данными, которые я не получил.Может ли кто-нибудь помочь мне, как сделать то же самое.Заранее спасибо

Это пример кода, который я использую, и более того, я не знаю, будет ли он работать или нет.

var myTreeGrid = new Ext.us.tree.TreeGrid({
    columns: columnsConfig,
    rootVisible: false,
    root: rootNode,
    loader: new Ext.ux.tree.TreeGridLoader({preloadChildren: true})
});
var rootNode = $('#treegridsamp').jqgrid({
    treeGrid: true,
    treeGridModel: 'adjacecncy',
    ExpandColumn: 'name',
    datatype: "local",
    mtype: 'Get',
    colNames: ['id','Name','MenuId','Menu Name'],
    colModel: [
        {name:'RowId',index:'RowId',width:300,fixed:true},
        {name:'Name',index:'Name',width:300,fixed:true},
        {name:'MenuId',index:'MenuId',width:300,fixed:true},
        {name:'MenuName',index:'MenuName',width:300,fixed:true},
    ],
    root:[
        {id:"1",Name:"Main Menu", MenuId:"1",MenuName:"Menu1"},
        {id:"2",Name:"Main Menu1",MenuId:"2",MenuName:"Menu2"},
        {id:"3",Name:"Main Menu2",MenuId:"3",MenuName:"Menu3"}
    ],
    pager: '#dvtreegridsamp',
    Caption: 'Sample Tree View Model'
})
$("#treegridsamp").jqGrid('navGrid', '#dvtreegridsamp',
    { edit: false, add: false, del: false, search: false, refresh: false });
var mydata=[
    {id:"1",    Name:"Main Menu",   MenuId:"1",MenuName:"Menu1"},
    {id:"2",    Name:"Main Menu1",  MenuId:"2",MenuName:"Menu2"},
    {id:"3",    Name:"Main Menu2",  MenuId:"3",MenuName:"Menu3"},
    {id:"1.1",  Name:"Sub Menu",    MenuId:"1",MenuName:"Menu1"},
    {id:"1.2",  Name:"Sub Menu1",   MenuId:"1",MenuName:"Menu1"},
    {id:"1.1.1",Name:"Sub Sub Menu",MenuId:"1",MenuName:"Menu1"},
    {id:"2.1",  Name:"Main Menu",   MenuId:"2",MenuName:"Menu2"},
    {id:"2.2",  Name:"Main Menu",   MenuId:"2",MenuName:"Menu2"},
    {id:"3.1",  Name:"Main Menu",   MenuId:"3",MenuName:"Menu3"},
    {id:"3.2",  Name:"Main Menu",   MenuId:"3",MenuName:"Menu3"},
];
for(var i=0;i<mydata.length;i++) {
    $("#treegridsamp").jqGrid('addRowData',i+1,mydata[i]);
}

1 Ответ

12 голосов
/ 17 марта 2011

Вы кодируете небольшие простые ошибки, но основная проблема, с которой вы сталкиваетесь, заключается в том, что ваш код сделан для добавления простых строк, а не узлов дерева.Вы можете перейти на официальную демонстрационную страницу и выбрать в разделе «Новое в версии 3.4» демо «Модель смежности с сеткой деревьев».

Я написал демонстрационную версию , которая работаетточно так же, как демо из демо со страницы демона trirand, но используйте только локальные данные :

enter image description here

В вашем случае вам нужно расширить объекты из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
});

В результате вы получите

enter image description here

Вы можете увидетьдемо 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:"", см. здесь для получения более подробной информации.

...