function textSize(fontSize, text) { var span = document.createElement("span"); var result = {}; result.width = span.offsetWidth; result.height = span.offsetWidth; span.style.fontSize = fontSize span.style.visibility = "hidden"; document.body.appendChild(span); if (typeof span.textContent != "undefined") span.textContent = text; else span.innerText = text; result.width = span.offsetWidth - result.width; result.height = span.offsetHeight - result.height; span.parentNode.removeChild(span); return result; }
首先上面是一个根据字号来算出一串文本宽度的函数,UltraWebGrid默认的Font-Size 是8.25pt,另外还有left padding 3的偏移,算的时候加上3,效果不明显,所以加了5,至于字号大家可以自己设置的,函数里自己替换就可以了,下面是具体的设置列宽的函数了(为UltraWebGrid初始化函数),思路是这样的,找出该列中最长的文本宽度加上5个像素的偏移量,然后再设置成该列的宽度:)
function Grid_InitializeLayoutHandler(gridName) { var grid = igtbl_getGridById(gridName); var columnCount = grid.Bands[0].Columns.length; var rowCount = grid.Rows.length; if (grid && row) { for (var i = 1; i < columnCount; i++) { for (var j = 0; j < rowCount; j++) { var cellValue = grid.Rows.getRow(j).getCell(i).getValue(); var getWidth = textSize("8.25pt", cellValue).width; if (!cellValue) continue; var colWidth = 0; if (getWidth) { if (getWidth > colWidth) colWidth = getWidth; } grid.Bands[0].Columns[i].setWidth(colWidth + 5); } } } }