在这里,我根据数据设置网格单元格宽度的方式。这是针对datagrid
obj 的,但您可能需要对dgrid
obj 进行一些调整。
有几个步骤:
<div>
1)在您的 html 调用中创建一个标签test
<div id="test"></div>
2) 遍历网格中每一列的数据,并使用 javascript 捕获该列数据的最大宽度,例如:
var fnt_sz = '9pt';
var tst_item = window.document.getElementById("test");
tst_item.style.fontSize = fnt_sz;
var widthPX = 45; //default px width
for (var i = 0; i < columns.length; i++) {
tst_item.innerHTML = columns[i]; //columns array represents data that will display for the column
widthPX = (tst_item.clientWidth + 1); //Give width in PX of the data pad it a bit as needed
}
这里的重要项目包括设置适当的字体大小(fnt_sz),循环遍历所有列数据以找到列的 PX 最大宽度。使用列的最大值widthPX
来设置layout
数据网格对象中的列宽。
3) 在为您的数据网格创建布局 JSON 数据时,设置每列的宽度(该列的最大数据宽度 PX)。就像是:
var build_layout = " var layout = [[{'name': 'ID', 'field': 'id', 'width': '17px'},";
for (var i = 0; i < cols.length; i++) {
build_layout += "\n{'name': '" + cols[i] + "', 'field': 'col" + (i+1) + "', 'width': '" + widths[i] + "px'},";
}
build_layout += "]];";
eval(build_layout);
/*create a new grid*/
var grid = new DataGrid({
id: 'grid',
store: store,
structure: layout, //Use layout JSON data which has width: xxpx; set for each column
rowSelector: '20px',
style: 'font-size:9pt',
rowsPerPage: 1000,
columnReordering: true,
autoWidth: true,
autoHeight: autoH});
当网格显示时,它应该在任何浏览器中看起来都很好,并且所有数据都应该可见,因为列宽 PX 值大于该列的最大数据项。应该很容易为每列添加一个最大 px 值,所以宽度不会失控。
这在 $ss 中有点麻烦,应该是 dojo 数据网格对象的属性,但是......
这是我最终完成这些步骤的结果: