gurdev Ответов: 4

Как объединить ячейки в сетке пользовательского интерфейса Kendo


я хочу объединить ячейки (Row span или col span) в сетке Kendo ui Grid, как мы можем это сделать?

4 Ответов

Рейтинг:
28

gurdev

да, вы правы: "слияние ячеек в сетке Kendo UI не поддерживается", поэтому в конце концов я решил объединить ячейки после рендеринга сетки kendo ui, поэтому я использовал javascript для слияния ячеек в событии DataBound сетки kendo ui.

определение функции, которое я вызвал в событии databound :

function mergeGridRows(gridId, colTitle) {

    $('#' + gridId + '>.k-grid-content>table').each(function (index, item) {

        var dimension_col = 1;
        // First, scan first row of headers for the "Dimensions" column.
        $('#' + gridId + '>.k-grid-header>.k-grid-header-wrap>table').find('th').each(function () {
            if ($(this).text() == colTitle) {

                // first_instance holds the first instance of identical td
                var first_instance = null;

                $(item).find('tr').each(function () {

                    // find the td of the correct column (determined by the colTitle)
                    var dimension_td = $(this).find('td:nth-child(' + dimension_col + ')');

                    if (first_instance == null) {
                        first_instance = dimension_td;
                    } else if (dimension_td.text() == first_instance.text()) {
                        // if current td is identical to the previous
                        // then remove the current td
                        dimension_td.remove();
                        // increment the rowspan attribute of the first instance
                        first_instance.attr('rowspan', typeof first_instance.attr('rowspan') == "undefined" ? 2 : first_instance.attr('rowspan') + 1);
                    } else {
                        // this cell is different from the last
                        first_instance = dimension_td;
                    }
                });
                return;
            }
            dimension_col++;
        });

    });
}




вспомогательная ссылка : http://www.arsnova.cc/web-development-articles/2013-08-26/merging-table-cells-jquery-javascript[^]


Maciej Los

+5!

Рейтинг:
2

Maciej Los

Слияние ячеек в сетке Kendo UI не поддерживается

Пожалуйста, прочтите это: Динамическое добавление / удаление столбцов и слияние ячеек сетки пользовательского интерфейса Kendo[^]


Рейтинг:
2

AOCAKLI

поддерживается несколько столбцов!

использование в Примере databound :

mergeGridRows("GridID", ["Column1", "Column2", "Column3"])



function mergeGridRows(gridId, colTitles) {

        $('#' + gridId + '>.k-grid-content>table').each(function (index, item) {
            debugger;
            var dimension_col = 1;
            var sutunSayisi = parseInt($('#' + gridId + '>.k-grid-header>.k-grid-header-wrap>table').find('th').size()) / 2;
            // First, scan first row of headers for the "Dimensions" column.
            $('#' + gridId + '>.k-grid-header>.k-grid-header-wrap>table').find('th').each(function () {
                var indexOf = colTitles.indexOf($(this).text());
                if (indexOf>-1) {
                    // first_instance holds the first instance of identical td
                    var first_instance = null;
                    dimension_col = $(this).index() + 1;
                    $(item).find('tr').each(function () {
                        // find the td of the correct column (determined by the colTitle)

                        var dimension_td = $(this).find('td:nth-child(' + (dimension_col-(sutunSayisi-$(this).find('td').size())) + ')');

                        if (first_instance == null) {
                            first_instance = dimension_td;
                            
                            
                        } else if (dimension_td.text() == first_instance.text()) {
                            // if current td is identical to the previous
                            // then remove the current td
                            dimension_td.remove();
                            // increment the rowspan attribute of the first instance
                            first_instance.attr('rowspan', typeof first_instance.attr('rowspan') == "undefined" ? 2 : parseInt(first_instance.attr('rowspan')) + 1);
                            
                        } else {
                            // this cell is different from the last
                            first_instance = dimension_td;
                        }
                    });
                    return;
                }
            });

        });
    }


Рейтинг:
1

Haggagy

Решение 2 хорошо для сетки кендо, но для редактируемой сетки кендо оно сдвинет следующие столбцы вправо на один столбец.

Вот исправление для этой проблемы:

function MergeGridRows(gridId, colTitle) {

        $('#' + gridId + '>.k-grid-content>table').each(function (index, item) {
            var dimension_col = 1;
            // First, scan first row of headers for the "Dimensions" column.
            $('#' + gridId + '>.k-grid-header>.k-grid-header-wrap>table').find('th').each(function() {
                var _this = $(this);
                if (_this.text() == colTitle) {
                    var bgColor = _this.css('background-color');
                    var foreColor = _this.css('color');
                    var rightBorderColor = _this.css('border-right-color');
                    // first_instance holds the first instance of identical td
                    var first_instance = null;
                    var cellText = '';
                    var arrCells = [];
                    $(item).find('tr').each(function() {
                        // find the td of the correct column (determined by the colTitle)
                        var dimension_td = $(this).find('td:nth-child(' + dimension_col + ')');

                        if (first_instance == null) {
                            first_instance = dimension_td;
                            cellText = first_instance.text();
                        } else if (dimension_td.text() == cellText) {
                            // if current td is identical to the previous
                            dimension_td.css('border-top', '0px');
                        } else {
                            // this cell is different from the last
                            arrCells = ChangeMergedCells(arrCells, cellText, true);
                            //first_instance = dimension_td;
                            cellText = dimension_td.text();
                        }
                        arrCells.push(dimension_td);
                        dimension_td.text("");
                        dimension_td.css('background-color', bgColor).css('color', foreColor).css('border-bottom-color', rightBorderColor);
                    });
                    arrCells = ChangeMergedCells(arrCells, cellText, false);
                    return;
                }
                dimension_col++;
            });

        });
    }

    function ChangeMergedCells = (arrCells, cellText, addBorderToCell) {
        var cellsCount = arrCells.length;
        if (cellsCount > 1) {
            var index = parseInt(cellsCount / 2);
            var cell = null;
            if (cellsCount % 2 == 0) { // even number
                cell = arrCells[index -1];
                arrCells[index -1].css('vertical-align', 'bottom');
            }
            else { // odd number
                cell = arrCells[index];
            }
            cell.text(cellText);
            if (addBorderToCell)
                arrCells[cellsCount -1].css('border-bottom', 'solid 1px #ddd');
            arrCells =[]; // clear array for next item
        }
        return arrCells;
    }