on ‎2020 Jun 17 1:45 AM
Hello.
I want to adjust the width of the column to match the width of the content, using sap.ui.table.Table.
The controller code is as follows.
onInit: function () {
var oTable = this.byId("table");
oTable.bindRows({
path: '/BusinessPartnerSet',
events: {
dataReceived: this._adjustColumn.bind(this)
}
});
},
_adjustColumn: function () {
var oTable = this.byId("table");
oTable.getColumns().forEach((oColumn, index) => {
oTable.autoResizeColumn(index);
});
}
The issue is, at the point of dataRecieved event, contents in the table are not yet available.
As a result, the columns are adjusted to match the width of the title, wihch is sometimes too small to fit all the content in.

Does anybody know which event we can use to adjust columns?
Best regards,
Mio
Request clarification before answering.
setTimeout is something you can use or you can try onafterrendering of table
oMyTable.addEventDelegate({
onAfterRendering: function() {
// Try resizing here.. if the data is loaded
}
});
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
oTable.attachEvent("_rowsUpdated", function() {
///
}.bind(this));
so for now it looks like setTimeout is on way(which also I don't like it 😄 )BR,Mahesh
SAP should really provide an event after data is loaded into the table, so resizing columns can be done. Without this Grid Tables are pretty much useless. Having to manually press a Resize button every time data is loaded is not good user experience.
I thought beforeRebindTable event would be that event, but it doesn't seem to work, like all other events it seems to be too early.
Has anyone had any luck with beforeRebindTable?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Since the smarttable directly reads data from odata it is usually not possibly to read the data bound to the table unless we access the inner table. In this case "events parameter comes to the rescue.
You can add change, datarequested, datareceived, attachdatastatechange events to the beforerebindtable/beforerebindtableextension (if its a list report) method
onBeforeRebindTableExtension: function (event) {
event.getParameters()["bindingParams"].events = {
"dataRequested":function(er)
{
},
"dataReceived": function (ec) {
ec.getParameter("data") //this will give the table resultset
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi navneet_nair,
Thanks for your suggestion.
I tried the solution, but BusyStateChanged event was too early to adjust columns.
The columns were adjusted to match the width of the title rather rather than the width of the contents.
I used sap.ui.table.Table in a freestyle app (not list report), which may caused the difference.
Thanks,
Mio
Hi
Try this code as well - in the event after rendering.
var oTe = new sap.ui.table.TablePointerExtension(oTable);
var aColumns = oTable.getColumns();
for (var i = 0; i < aColumns.length; i++) {
oTe.doAutoResizeColumn(i);
}
Regards,
Venkat
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
| User | Count |
|---|---|
| 9 | |
| 5 | |
| 4 | |
| 4 | |
| 3 | |
| 3 | |
| 2 | |
| 2 | |
| 2 | |
| 2 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.