У меня есть две сетки: в первой я выбираю значение, а во второй показываю ту же строку, но делаю ее редактируемой. Это выглядит так:
jQuery("#GridSelectedProducts").jqGrid({
height: '100%',
width: '100%',
autowidth: true,
regional: 'en',
/*data:{},*/
datatype: "local",
colNames: ['id', 'productid', 'opportunityproductid', 'Product', 'Product-Title', 'Unit', 'defaultunit', 'uomid', 'Override-Product', 'Price', 'Qty', 'Volumes-Discount', 'Amount', 'Discount-Type', 'Discount', 'Total-After-Discount', 'Cost-Amount', 'Margin', 'Percentage', 'Revenue-Stream', 'Licensing'],
colModel: SelectedProductsModel,
mtype: 'Post',
id: "pw_id",
viewrecords: true,
rowList: [5, 10, 20],
pager: '#pager10_d',
sortable: true,
sortname: 'id',
sortorder: "asc",
multiselect: false,
forceFit: true,
cellEdit: true,
hidegrid: false,
cellsubmit: 'clientArray',
afterSaveCell: Calcul,
loadComplete: $("a").click(),
caption: "Selected Products"
}).navGrid('#pager10_d', {
add: false,
edit: false,
del: true,
refresh: false // NPI : remove refresh button because it empty lines when used on newed added row configured !
});
«Поток доходов» и «Лицензирование» — это раскрывающиеся поля. Я хотел бы скрыть определенные значения в разделе «Лицензирование» на основе выбранного значения в «Потоке доходов». Я не смог найти никаких ресурсов, статей или вопросов, где я мог бы найти такое поведение. Есть ли у вас идеи, как я могу этого добиться?

Потратив много времени на это дело, я наконец пришел к решению, которое мне подходит, и хочу поделиться им с вами.
Очевидно, у jqGrid есть параметры, когда происходит рендеринг сетки.
jQuery(#"YourLovelyGrid").jqGrid({
height: '',
width: '',
// a lot of other options
});
Я обнаружил, что есть события, которые также можно прикрепить к приведенному выше коду. Эти события выглядят так:
onSelectCell: это событие срабатывает при выборе ячейки. Он предоставляет идентификатор строки и имя выбранной ячейки.
beforeSaveCell: это событие срабатывает перед сохранением ячейки (т. е. после редактирования). Это позволяет вам выполнять действия или проверки перед сохранением данных ячейки.
afterSaveCell: это событие срабатывает после сохранения ячейки (т. е. после редактирования). Позволяет выполнять действия после ячейки данные были сохранены.
beforeSelectCell: это событие срабатывает перед выбором ячейки. Это позволяет вам выполнять действия или проверки перед ячейка выбрана.
afterEditCell: это событие срабатывает после редактирования ячейки. Он предоставляет идентификатор строки и имя редактируемой ячейки.
Я использовал эту информацию для достижения желаемого поведения. Я добавил логику в beforeEditCell — здесь я проверяю, редактирую ли я нужную ячейку, назовем ее X. Если при попытке редактирования X-rowData.Y равен некоторым конкретным значениям, я присоединяю к ячейке класс только для чтения и возвращаю false (Я полагаю, это необходимо для правильной работы jqgrid).
beforeEditCell: function (rowid, cellname, value, iRow, iCol) {
var rowData = $("#GridSelectedProducts").jqGrid('getRowData', rowid);
if (cellname === 'Licensing') {
if (rowData.RevenueStream === "Licenses" || rowData.RevenueStream === "Software Updates")
return true;
else {
$("#GridSelectedProducts").jqGrid('setCell', rowId, 'Licensing', '', '', {
'class': 'readonly-cell',
});
return false;
}
}
}
Класс только для чтения довольно прост:
.read-only-cell {
background-color: #f0f0f0;
pointer-events: none;
}
Если вы хотите очистить значения на основе того, что вы выбрали в ячейке Y, вы можете манипулировать ими с помощью afterEditCell или afterSaveCell, в данный момент я не могу точно определить, как связаны фокус управления и эти два события. У них довольно случайное поведение.