Динамически изменять значение в jqgrid

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

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 !
});

«Поток доходов» и «Лицензирование» — это раскрывающиеся поля. Я хотел бы скрыть определенные значения в разделе «Лицензирование» на основе выбранного значения в «Потоке доходов». Я не смог найти никаких ресурсов, статей или вопросов, где я мог бы найти такое поведение. Есть ли у вас идеи, как я могу этого добиться?

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
1
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потратив много времени на это дело, я наконец пришел к решению, которое мне подходит, и хочу поделиться им с вами.

Очевидно, у 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, в данный момент я не могу точно определить, как связаны фокус управления и эти два события. У них довольно случайное поведение.

Другие вопросы по теме