表列重新排序上的自定义功能->更改基础表模型

时间:2018-10-09 12:38:50

标签: javascript xml dom sapui5 sheetjs

我使用SheetJS将excel工作表上传到ui.table。上传时,我在列名称中添加了一个技术ID,以后在项目中将需要使用该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;
},

创建模型时,我将columnIdtechnicalId绑定到每一列。

我的用户应该可以选择对表列进行重新排序,以便映射到另一个表。 (这里的上下文不是很重要),所以基本上我的上传表下面还有另一个表,用户应该可以对“ uploadTable”的列进行重新排序以使其与下面的表匹配。

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

此功能应调整技术columnNames。 ->例如数据已上传,位置1上的列的技术标识为“ COL01”,现在将其拖至位置2->技术标识应更改为COL02,反之亦然。

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

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

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

我对此表示感谢。如果有什么不清楚的地方,我很乐意解释!

1 个答案:

答案 0 :(得分:0)

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

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

记住ID(例如,将列标签作为ID):

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

更新ID:

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;
})