2015-09-22 5 views
2

Я создал сетку с несколькими уровнями подсетей, используя jqGrid и с небольшой помощью от этого answer. Вот то, что я в настоящее время:Как показать subgrid jqGrid только для определенных строк?

Grid current status

Я пытаюсь изменить его таким образом, чтобы только показать юг сетку, если есть данные, чтобы показать. Другими словами, если count > 0. Логически я пытался добавить условие (псевдо-код, основанный на ранее упомянутый ответ):

Оригинальный код

var gridParams = { 
    datatype: 'local', 
    data: myGridData, 
    colNames: ['Column 1', 'Column 2'], 
    colModel: [ 
     { name: 'col1', width: 200 }, 
     { name: 'col2', width: 200 } 
    ], 
    ... 
    subGrid: true, 
    subGridRowExpanded: function (subgridDivId, rowId) { 
     var subgridTableId = subgridDivId + "_t"; 
     $("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>"); 
     $("#" + subgridTableId).jqGrid({ 
      datatype: 'local', 
      data: mySubgrids[rowId], 
      colNames: ['Col 1', 'Col 2', 'Col 3'], 
      colModel: [ 
       { name: 'c1', width: 100 }, 
       { name: 'c2', width: 100 }, 
       { name: 'c3', width: 100 } 
      ], 
      ... 
     }); 
    } 
} 

$("#grid").jqGrid(gridParams); 

скорректированный код

var gridParams = { 
    datatype: 'local', 
    data: myGridData, 
    colNames: ['Column 1', 'Column 2'], 
    colModel: [ 
     { name: 'col1', width: 200 }, 
     { name: 'col2', width: 200 } 
    ], 
    ... 
} 

// Condition added HERE 
if (count > 0) 
{ 
    gridParams.subGrid = true; 
    gridParams.subGridRowExpanded = function (subgridDivId, rowId) { 
     var subgridTableId = subgridDivId + "_t"; 
     $("#" + subgridDivId).html("<table id='" + subgridTableId + "'></table>"); 
     $("#" + subgridTableId).jqGrid({ 
      datatype: 'local', 
      data: mySubgrids[rowId], 
      colNames: ['Col 1', 'Col 2', 'Col 3'], 
      colModel: [ 
       { name: 'c1', width: 100 }, 
       { name: 'c2', width: 100 }, 
       { name: 'c3', width: 100 } 
      ], 
      ... 
     }); 
    } 
} 

$("#grid").jqGrid(gridParams); 

, но это просто терпит неудачу:

enter image description here

Это просто не поддерживается, или я делаю что-то неправильно?

ответ

2

Если я правильно понимаю ваш вопрос, тогда вы хотите удалить значок «+» (развернуть подсетей) для строк, которые не имеют элементов в подсете. В случае, если вы можете выполнить старый трюк, описанный в the old answer. Вы можете добавить дескриптор loadComplete, который удаляет иконки «+» из сетки с опцией subGrid: true. Вам нужно просто знать ROWID'ы те все строки сетки, которые не имеют Подсеточные и сделать для строк

$("#" + rowid + ">td.sgcollapsed").unbind("click").html(""); 

ОБНОВЛЕНЫ: Я отправил модификацию free jqGrid которая позволяет легко реализовать требование без выше хака.

The demo демонстрирует новую функцию. Реализация очень проста. Он содержит hasSubgrid callback внутри subGridOptions. Обратный вызов имеет options, который является объектом со свойствами rowid, data и двумя менее важными свойствами iRow и iCol. Код демонстрации использует options.data, которые представляют данные строки. Демонстрационный создает Подсеточный только если входная строка имеет tax выше, 20.

subGridOptions: { 
    hasSubgrid: function (options) { 
     return parseFloat(options.data.tax) > 20; 
    } 
} 

Вы можете использовать mySubgrids[options.data.rowid].length в вашем случае, если я правильно понимаю формат входных данных.

+0

Я думал о том, чтобы не заполнить пустую сетку в кулачном месте, но этот hgack полностью делает трюк! Спасибо! –

+1

@MoslemBenDhaou: То, что я имею в виду, также не является популяцией субгрида. Вместо этого вы можете включить в ** родительскую сетку ** взломать. Это предотвратит добавление значка «+» в строке родительской сетки, поэтому никакая подсечка никогда не будет заполнена для строки. Кстати, я подготовил модификацию [free jqGrid] (https://github.com/free-jqgrid/jqGrid) (форвард jqGrid, который я создаю, начиная с конца 2014 года), который вводит обратный вызов hasSubgrid' в 'subGridOptions '. Обратный вызов сообщает jqGrid, в котором строки должны быть добавлены значок «+» и в которых нет. Я скоро опубликую изменения и сообщит вам. – Oleg

+1

@MoslemBenDhaou: Я разместил модификацию [здесь] (https://github.com/free-jqgrid/jqGrid/commit/6922b6e184490426ffdbc23cd9ed74faebbee166).Таким образом, вы можете загрузить последний код из GitHub или использовать [urls] (https://github.com/free-jqgrid/jqGrid/wiki/Access-free-jqGrid-from-different-CDNs#access-githib-code -из-rawgit). – Oleg