Kendo Grid и флажки - выберите все для данного столбца, выберите все предыдущие / отмените выбор всех после для данной ячейки строки

Фон для этого вопроса сосредоточен на сетке, демонстрирующей ход выполнения задач по рабочим элементам. Каждая строка представляет рабочий элемент, который следует заданному шаблону шагов, некоторые из которых выполняются для каждого рабочего элемента или выполняются для всех рабочих элементов одновременно.

Суть в том, что в заголовке должен быть предусмотрен флажок для каждого шага, который выполняется для всех рабочих элементов одновременно, и когда этот флажок установлен, все флажки в этом столбце отмечены.

Кроме того (и я понимаю, что это может быть отдельный вопрос, но я включаю его, поскольку это часть той же проблемы, с которой я сталкиваюсь), всякий раз, когда установлен флажок в строке, все предыдущие флажки в этой строке также проверяются. Также считается, что любые флажки после определенного флажка снимаются, если они непреднамеренно отмечены, но я предполагаю, что это будет незначительным дополнением к коду «выбрать» для флажка ячейки строки.

Я понимаю, что событие «при щелчке» в флажке заголовка столбца запускает функцию, которая перебирает строки и выбирает/снимает флажки в этом столбце. Эти флажки, в свою очередь, будут иметь события onclick и onchange (поскольку флажок на самом деле не «щелкнут»?), которые выбирают все флажки до этого флажка и отменяют эти флажки дальше по строке.

Ниже приведен пример кода, отображающего таблицу, и некоторый псевдокод. пример использует статические данные в качестве доказательства концепции для клиента, но в конечном итоге будет взаимодействовать с базой данных SQL. Я рад, что мне показали вопрос, который отвечает на любой аспект этого вопроса, но, честно говоря, вопросы, которые могут ответить на эти вопросы, не очень ясны для меня или лучше подходят для разных пользовательских интерфейсов/языков. .

$(document).ready(function () {
    $("#grid").kendoGrid({
        dataSource:
        {
            transport:
            {
                read:  {
                    url: "<?= $site_url ?>asset/data/production_progress.json",
                    type: "GET",
                    dataType: "json"
                },
                parameterMap: function(options, operation) {
                    if (operation !== "read" && options.models) {
                        return {models: kendo.stringify(options.models)};
                    }
                    else
                    {
                        return "";
                    }
                }
            },
            schema:
            {
                model:
                {
                    id:"Item",
                    fields:
                    {
                        Item: { editable: false },
                        Step1: { type:"boolean", editable: true },
                        Step2: { type:"boolean", editable: true },
                        Step3: { type:"boolean", editable: true },
                        Step4: { type:"boolean", editable: true },
                        Step5: { type:"boolean", editable: true }
                    }
                }
            }
        },
        scrollable: false,
        pageable: false,
        columns: [
            { field: "Item" },
            { field: "Step1", title: "Step 1", attributes: {style: "text-align: center"}, template: '<input type="checkbox" #= Step1 ? "checked=checked" : "" # ></input>' },
            { field: "Step2", title: "Step 2", attributes: {style: "text-align: center"}, template: '<input type="checkbox" #= Step2 ? "checked=checked" : "" # ></input>' },
            { field: "Step3", attributes: {style: "text-align: center"}, template: '<input class="Step3" name="Step 3" type="checkbox" #= Step3 ? "checked=checked" : "" # ></input>', headerTemplate: 'Step 3<input type="checkbox" name="step3SelectAll"></input>' },
            { field: "Step4", title: "Step 4", attributes: {style: "text-align: center"}, template: '<input type="checkbox" #= Step4 ? "checked=checked" : "" # ></input>' },
            { field: "Step5", title: "Step 5", attributes: {style: "text-align: center"}, template: '<input type="checkbox" #= Step5 ? "checked=checked" : "" # ></input>' }
        ],
        editable: "inline"
    });

    $("#step3SelectAll").change(function(){
        if ($('#step3SelectAll').is(':checked')) {
            $('.Step3').prop('checked', true);
        }
        else
        {
            $('.Step3').prop('checked', false);
        }
    });

    // Start of pseudo-code
    $("#grid.row.Step3").change(function() {
        // Get dataSource from Grid
        // Not sure how this is done, examples seen have separate dataSources which is against coding requirements

        // Set all row cells prior to Step 3 as Selected
        dataSource.row.Step1.value = "true";
        dataSource.row.Step2.value = "true";
        // Set all tor cells after to Step 3
        dataSource.row.Step4.value = "false";
        dataSource.row.Step5.value = "false";
    });
});

РЕДАКТИРОВАТЬ: Выяснили, как выбрать/отменить выбор всего столбца, установив флажок шаблона столбца (в данном случае Шаг 3) как имеющий класс (в данном случае «Шаг 3») и добавив дополнительный «$("#step3SelectAll" .change".функция. Теперь рассмотрим изменения флажка только для строк.


person David Smithson    schedule 10.10.2013    source источник


Ответы (2)


Я отвечаю на одну часть вопроса и закрываю его, чтобы больше сосредоточиться на оставшемся аспекте моей проблемы в отдельном вопросе. Для тех, кто читает это, мне удалось решить проблему «выбрать все в столбце», настроив шаблон заголовка так, чтобы он содержал определенный класс, а затем иметь функцию, которая срабатывает всякий раз, когда что-либо с этим классом изменяется:

Запись столбца Kendo Grid:

{ field: "Step3", attributes: {style: "text-align: center"}, template: '<input class="Step3" name="Step 3" type="checkbox" #= Step3 ? "checked=checked" : "" # ></input>', headerTemplate: 'Step 3<input type="checkbox" name="step3SelectAll"></input>' }

Функция, которая устанавливает/снимает флажки:

$("#step3SelectAll").change(function(){
    if ($('#step3SelectAll').is(':checked')) {
        $('.Step3').prop('checked', true);
    }
    else
    {
        $('.Step3').prop('checked', false);
    }
});

{поле: "Шаг 3", атрибуты: {стиль: "выравнивание текста: по центру"}, шаблон: '', headerTemplate: 'Шаг 3' }

person David Smithson    schedule 11.10.2013

{
    field: "Step3", 
    attributes: {style: "text-align: center"},
    template: '<input class="Step3" name="Step 3" type="checkbox" #= Step3 ? "checked=checked" : "" # ></input>',
    headerTemplate: 'Step 3<input type="checkbox" id="step3SelectAll"></input>'
}

используйте id = "step3SelectAll" вместо name="step3SelectAll", потому что вы использовали "#`" в $("#step3SelectAll").

person Harshal Ingle    schedule 28.04.2014