2015-02-10 4 views
1

Пожалуйста, помогите мне разобраться в том, что набор столбцов заморожен, а остальная часть имеет функцию редактирования ячейки, а также параметры переупорядочения столбцов/show-hide с помощью jqgrid ,jqgrid frozenColumns + (ячейка Редактирование и сортировка/переупорядочение незамороженных столбцов)

Thank you.

+0

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:frozencolumns – Runcorn

+0

вам нужно изменить некоторые Do замороженные столбцы или только столбцы, у которых нет свойства 'frozen: true'? – Oleg

+0

@Oleg - Мне нужно отредактировать только незамороженные столбцы, но эти незамороженные столбцы нужно переупорядочить или показать/скрыть. – user3759787

ответ

0

Проблема в том, что текущая реализация setFrozenColumns имеет некоторые ограничения. Редактирование (в любом режиме редактирования) и sortable: true не разрешено для замороженных столбцов, но setFrozenColumns. Более того, sortable: true не должен допускать использование заголовков замороженных столбцов. С другой стороны, setFrozenColumns содержит простой тест некоторых параметров (см. here), и метод ничего не делает, если установлены некоторые такие параметры (например, cellEdit или sortable).

Я предложил в the postthe demo) способом реализации обходного пути. Способом является изменение подхода от the answer и this one.

Я нахожу ваш вопрос интересным, и поэтому я создал the demo, который демонстрирует, как каждый может реализовать ваши требования. Он показывает следующие результаты (анимированный GIF):

enter image description here

Он использует в основном следующий код

// create the grid 
$grid.jqGrid({ 
    ... 
}); 

$grid.bind("jqGridLoadComplete jqGridInlineEditRow jqGridAfterEditCell jqGridAfterRestoreCell jqGridInlineAfterRestoreRow jqGridAfterSaveCell jqGridInlineAfterSaveRow", function() { 
    fixPositionsOfFrozenDivs.call(this); 
}); 

$grid.jqGrid("setGridParam", {cellEdit: false, sortable: false}); 
$grid.jqGrid("setFrozenColumns"); 
$grid.jqGrid("setGridParam", {cellEdit: true, sortable: true}); 
fixPositionsOfFrozenDivs.call($grid[0]); 

try { 
    var p = $grid.jqGrid("getGridParam"), tid = $.jgrid.jqID(p.id), colModel = p.colModel, i, n = colModel.length, cm, 
     skipIds = []; 

    for (i = 0; i < n; i++) { 
     cm = colModel[i]; 
     if ($.inArray(cm.name, ["cb", "rn", "subgrid"]) >=0 || cm.frozen) { 
      skipIds.push("#jqgh_" + tid + "_" + $.jgrid.jqID(cm.name)); 
     } 
    } 

    $grid.jqGrid("setGridParam", {sortable: {options: { 
     items: skipIds.length > 0 ? ">th:not(:has(" + skipIds.join(",") + "),:hidden)" : ">th:not(:hidden)" 
    }}}); 

    $grid.jqGrid("sortableColumns", $($grid[0].grid.hDiv).find(".ui-jqgrid-labels")); 
} catch (e) {} 
+0

@ Oleg- Большое вам спасибо. Я новичок, когда дело доходит до jqgrid, и я считаю, что многие ваши сообщения очень полезны. Все еще изо всех сил стараюсь изо всех сил. Я не могу сопоставить такие элементы, как bDiv, cDiv, hDiv, fbDiv, fhDiv, uDiv, которые были упомянуты в одном из ваших ответов. Попытка использования таких функций, как включение/отключение строк на основе условия загрузки jqgrid, включение/отключение столбцов на основе условия снова при загрузке jqgrid, в редактировании ячеек на основе условий, добавление новой строки со значением даже для замороженного столбца, все в тот же jqgrid. Будете держать вас в курсе. Еще раз спасибо! – user3759787

+0

@ user3759787: Добро пожаловать! Вы пытались отладить мою демонстрацию в отношении инструментов разработчика (нажмите F12 в веб-браузере, чтобы начать). Если вы установите точку останова где-то после создания сетки, вы увидите, что '$ grid [0]' ('$ (" # list ") [0]') имеет свойство 'grid' с' hDiv', 'bDiv' и другими , jqGrid создает и заполняет свойство grid.Я не могу ответить на все ваши вопросы сразу, но при необходимости вы можете открыть новые вопросы. Вы должны ["принять"] (http://meta.stackexchange.com/a/5235/147495) ответ, если текущая проблема будет решена в настоящее время. – Oleg

0

Пожалуйста, попробуйте это простое решение,

скрыть или удалить cellEdit: true

Затем добавьте нижеприведенные строки выше и ниже setFrozenColumns

Предыдущий код:

$("#jqGrid2").jqGrid('setFrozenColumns'); 

Новый код:

$("#jqGrid2").jqGrid("setGridParam", {cellEdit: false, sortable: false}); 
$("#jqGrid2").jqGrid('setFrozenColumns'); 
$("#jqGrid2").jqGrid("setGridParam", {cellEdit: true, sortable: true}); 
Смежные вопросы