Пользовательская функция переупорядочения столбцов таблицы -> изменить базовую модель таблицы - PullRequest
0 голосов
/ 09 октября 2018

Я использую SheetJS для загрузки листа Excel в ui.table.При загрузке я добавляю технический идентификатор к именам столбцов, который мне понадобится позже в моем проекте.Вот как я добавляю технический идентификатор:

getColumnNames: function(worksheet, aData) {
        var firstRow = aData[0];
        var oColumns = [];
        var cells = Object.keys(worksheet);
        for (var i = 0; i < Object.keys(firstRow).length; i++) {            
            var columnName = Object.keys(firstRow)[i];
            var technicalName = "COL" + ('0' + (i+1)).slice(-2);
            oColumns.push({
                columnId: columnName,
                technicalId: technicalName
            });
        }
    return oColumns;
},

При создании модели я связываю columnId и technicalId с каждым столбцом.

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

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

Эта функция должна настраивать техническую columnNames.-> Например, данные загружаются, столбец в позиции 1 имеет технический идентификатор "COL01", теперь он перетаскивается в позицию 2 -> технический идентификатор должен измениться на COL02 и наоборот.

Я считаю, что единственныйспособ сделать это - получить доступ к DomRef таблицы, потому что это единственное место, где хранится текущая структура таблицы, но я не совсем уверен, как мне поступить.

Моя функция переупорядочения получает толькоданные пока:

onReorder : function() {
    var table = this.getView().byId("uploadData");
    var currentStructre = table.getDomRef();
},

Буду признателен за любые намеки на это.Если что-то неясно, я с удовольствием объясню!

1 Ответ

0 голосов
/ 10 октября 2018

sap.ui.table.Table позволяет изменять порядок столбцов путем перетаскивания, а событие columnMove вызывается после.

Можно отслеживать и обновлять некоторые метки последовательности (например, идентификаторы) используя такой подход:

Запомните идентификаторы (например, метка столбца как идентификатор):

ids = oTable.getColumns().map(oColumn => oColumn.getAggregation('label').getText())

Обновите идентификаторы:

oTable.attachColumnMove(function(oEvent) {
  var from = oEvent.getParameter('column').getIndex();
  var to = oEvent.getParameter('newPos');
  var name = names.splice(from, 1);
  names.splice(to, 0, name);
  // Then write new ids to model;
})
...