0

我使用 SheetJS 将 excel 工作表上传到ui.table. 上传时,我在列名中添加了一个技术 ID,稍后在我的项目中将需要它。这就是我添加技术 ID 的方式:

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”的列以将它们与下表匹配。

现在为了进行正确的映射,我的技术 ID 必须在重新排序完成后进行调整。因此,我想添加一个在用户单击“刷新”按钮后正在执行的功能。

这个功能应该调整技术columnNames。--> 例如,数据已上传,位置 1 的列具有技术 ID“COL01”,现在它被拖到位置 2 --> 技术 ID 应更改为 COL02,反之亦然。

我相信,做到这一点的唯一方法是访问表的 DomRef,因为这是存储实际当前表结构的唯一地方,但我不确定我将如何进行。

到目前为止,我的重新排序功能仅获取数据:

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

我将不胜感激任何提示。如果有什么不清楚的地方,我很乐意解释!

4

1 回答 1

0

sap.ui.table.Table允许通过拖放对其列重新排序,然后触发columnMove事件。

可以使用以下方法跟踪和更新某些序列标签(例如 id):

记住 ids(例如作为 id 的列标签):

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;
})
于 2018-10-10T08:06:04.213 回答