我使用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;
},
创建模型时,我将columnId
和technicalId
绑定到每一列。
我的用户应该可以选择对表列进行重新排序,以便映射到另一个表。 (这里的上下文不是很重要),所以基本上我的上传表下面还有另一个表,用户应该可以对“ uploadTable”的列进行重新排序以使其与下面的表匹配。
现在,为了进行正确的映射,必须在重新排序后调整我的技术ID。因此,我想添加一个在用户单击“刷新”按钮后执行的功能。
此功能应调整技术columnNames
。 ->例如数据已上传,位置1上的列的技术标识为“ COL01”,现在将其拖至位置2->技术标识应更改为COL02,反之亦然。
我相信,做到这一点的唯一方法是访问表的DomRef,因为这是存储当前当前表结构的唯一位置,但是我不确定该如何进行。
我的重新排序功能仅获取到目前为止的数据:
onReorder : function() {
var table = this.getView().byId("uploadData");
var currentStructre = table.getDomRef();
},
我对此表示感谢。如果有什么不清楚的地方,我很乐意解释!
答案 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;
})