Цикл для чтения всех строк в сетке igHierarchicalGrid - PullRequest
0 голосов
/ 03 июля 2019

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

Я пробовал getInfo (), но эта функция возвращает мне только главный уровень igHierarchicalGrid

function getInfo() {   
  var $grid = $("#grid");
  var RowSelected = $("#grid").igHierarchicalGrid("option", "dataSource");

  for (var i = 0; i < RowSelected.length; i++) {
    var cell = $grid.igGrid("cellAt", 1, i)
    var $checkBox = $(cell.children[0]);
    if ($checkBox.prop("checked")) {
        updatetrue(RowSelected[i].FCU_SCREEN_NAME, RowSelected[0].FCU_TYPE, RowSelected[i].FCU_PARENT_NODE, RowSelected[i].FCU_CHAILD_NODE);

    } else {
        updatefalse(RowSelected[i].FCU_SCREEN_NAME, RowSelected[0].FCU_TYPE, RowSelected[i].FCU_PARENT_NODE, RowSelected[i].FCU_CHAILD_NODE);

    }
  }
  alert("Updated Successfuly");
}

это сетка:

$("#grid").igHierarchicalGrid({
    width: "100%",

    maxDataBindDepth: 4,

    //initialExpandDepth: 4,
    dataSource: Main, //Array of objects defined above
    fixedHeaders: true,
    primaryKey: "FCU_SNO",
    autoGenerateColumns: true,
    rowExpanding: function (e, args) {

        var grid = args.owner, expandedRows, i;
        expandedRows = $(args.parentrow).closest('tbody').find('tr[state=e]');
        for (i = 0; i < expandedRows.length; i++) {
            grid.collapse(expandedRows[i]);
        }

    },
    width: '99%',
    height: '480px',
    columns: [
        { headerText: "<br/>Code", key: "FCU_SNO", dataType: "int", width: "5%", hidden: true },
        { headerText: "Status", key: "FCU_SCREEN_FLAG", dataType: "bool", width: "5%", template: mytemplate },
        { headerText: "Screen", key: "FCU_SCREEN_NAME", dataType: "string", width: "40%" },
        { headerText: "FCU_TYPE", key: "FCU_TYPE", dataType: "string",  hidden: true },
        { headerText: "FCU_PARENT_NODE", key: "FCU_PARENT_NODE", dataType: "number", hidden: true},
        { headerText: "FCU_CHAILD_NODE", key: "FCU_CHAILD_NODE", dataType: "number", hidden: true},
    ],
    autofitLastColumn: false,
    autoGenerateColumns: false,
    dataSource: Main,
    responseDataKey: "results",
    autoCommit: true,
    primaryKey: "FCU_SNO",
    dataRendered: function (evt, ui) {
        ui.owner.element.find("tr td:nth-child(4)").css("text-align", "left");
    },

    features: featuresList,
    //defaultChildrenDataProperty: "Details1",
    columnLayouts: [{
        name: "Level1",
        features: featuresList,
        childrenDataProperty: "Details1",
        autoGenerateLayouts: true,
        autoGenerateColumns: false,
        fixedHeaders: true,
        primaryKey: "FCU_PARENT_NODE",
        columns: [
            { headerText: "<br/>Code", key: "FCU_SNO", dataType: "int", width: "5%", hidden: true },
            { headerText: "Status", key: "FCU_SCREEN_FLAG", dataType: "bool", width: "5%", template: mytemplate },
            { headerText: "Screen", key: "FCU_SCREEN_NAME", dataType: "string", width: "40%" },
            { headerText: "FCU_TYPE", key: "FCU_TYPE", dataType: "string", hidden: true },
            { headerText: "FCU_PARENT_NODE", key: "FCU_PARENT_NODE", dataType: "number", hidden: true },
            { headerText: "FCU_CHAILD_NODE", key: "FCU_CHAILD_NODE", dataType: "number", hidden: true },
        ],
        columnLayouts: [
            {
                name: "Level2",
                features: featuresList,
                childrenDataProperty: "Details2",
                autoGenerateLayouts: true,
                autoGenerateColumns: false,
                primaryKey: "FCU_PARENT_NODE",
                columns: [
                    { headerText: "<br/>Code", key: "FCU_SNO", dataType: "int", width: "5%", hidden: true },
                    { headerText: "Status", key: "FCU_SCREEN_FLAG", dataType: "bool", width: "5%", template: mytemplate },
                    { headerText: "Screen", key: "FCU_SCREEN_NAME", dataType: "string", width: "40%" },
                    { headerText: "FCU_TYPE", key: "FCU_TYPE", dataType: "string", hidden: true },
                    { headerText: "FCU_PARENT_NODE", key: "FCU_PARENT_NODE", dataType: "number", hidden: true },
                    { headerText: "FCU_CHAILD_NODE", key: "FCU_CHAILD_NODE", dataType: "number", hidden: true },
                ],
                columnLayouts: [
                    {
                        name: "Level3",
                        features: featuresList,
                        childrenDataProperty: "Details3",
                        autoGenerateLayouts: true,
                        autoGenerateColumns: false,
                        primaryKey: "FCU_PARENT_NODE",
                        columns: [
                            { headerText: "<br/>Code", key: "FCU_SNO", dataType: "int", width: "5%", hidden: true },
                            { headerText: "Status", key: "FCU_SCREEN_FLAG", dataType: "bool", width: "5%", template: mytemplate },
                            { headerText: "Screen", key: "FCU_SCREEN_NAME", dataType: "string", width: "40%" },
                            { headerText: "FCU_TYPE", key: "FCU_TYPE", dataType: "string", hidden: true },
                            { headerText: "FCU_PARENT_NODE", key: "FCU_PARENT_NODE", dataType: "number", hidden: true },
                            { headerText: "FCU_CHAILD_NODE", key: "FCU_CHAILD_NODE", dataType: "number", hidden: true },
                        ],

                    }
                ]
            }
        ]
    }]
});

1 Ответ

0 голосов
/ 11 июля 2019

API igHierarchicalGrid предлагает метод с именем allChildrenWidgets , который дает вам массив всех созданных дочерних виджетов.Обратите внимание, что родительская сетка создает такие экземпляры динамически, когда пользователь расширяет данную строку, а не для всех видимых в данный момент строк в родительской сетке.

Это означает, что если вы развернули только одну строку, вызов allChildrenWidgets вернул бы массив с одним экземпляром виджета.Как только вы получите этот массив, можно будет перебрать его и получить источник данных каждой дочерней сетки.Этот объект dataSource является преобразованной копией исходных данных, которые использовались при инициализации дочерней сетки, и как только пользователь установит флажок, этот источник данных будет обновлен.Вы можете присвоить его переменной, например:

let currentChild = $("#hierarchicalGrid").igHierarchicalGrid('allChildrenWidgets')[0]

Обратите внимание на '[0]' в конце - это потому, что allChildrenWidgets возвращает массив.Если вы используете его в цикле for, вы бы заменили его некоторым динамическим индексом.

Теперь, когда у нас есть ссылка на текущую дочернюю сетку, мы можем вызвать метод dataView ее источника данных - который даст нам текущие данные, отображаемые в этой дочерней сетке, и позволитнам нужно проверить записи, чтобы увидеть, какие из них были проверены:

let currentDataView = child.dataSource.dataView();
// ….
// some custom logic for checking the records….

Обратите внимание, что allChildrenWidgets возвращает плоский массив всех дочерних виджетов, содержащийвсе уровни иерархии - вам бы не пришлось бы рекурсивно вызывать его в текущем дочернем виджете, чтобы перейти к его дочерним сеткам уровня 3.

...