jqGrid根据文本长度调整列大小

时间:2012-12-24 14:41:11

标签: jquery jqgrid

我正在试图弄清楚如何根据网格内容调整网格列。 这仅适用于特定列。 到目前为止我所做的是通过遍历行并比较内容的长度来调整colModel。

如果内容超过之前的已知长度,则会再次调整colModel。 它看起来像这样。

        // Get rowId's and get find the longest content
        $.each(grid.jqGrid('getDataIDs'), function(row, rowid) {
            // Loop through the specified columns
            $.each(abo_fields, function(colid, column) {
                var abo = grid.jqGrid('getCell', rowid, column);
                var new_width = abo.length * 8;
                var current = grid.jqGrid('getColProp', column);
                if(current['width'] < new_width) {
                    grid.jqGrid('setColProp', column, {width:new_width});
                }                    
            });
        });

当我请求getColProp时,会调整colModel。 当我使用grid.trigger('reloadGrid');该列似乎保持与原始colModel中指定的相同。 我也试过通过jquery调整CSS,但这也没有成功。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

所以我在colModel选项中做了一些挖掘,发现了以下内容:

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options

  

下面是在构建网格时无法动态更改的选项(如果更改它们没有效果或将导致网格错误)。对于其中一些选项,有一些方法可用于更改值。

name
width
resizable
label (method avail.)

jqGrid wiki会说明以下内容以及是否真的需要这个。请记住,完成此操作后,网格中内置的任何逻辑都将消失。

  

使用当前设置重新加载网格。这意味着如果数据类型为xml或json,则会向服务器发送新请求。此方法应该应用于已构建的网格。请注意,此方法不会更改HEADER信息,这意味着对colModel的任何更改都不会受到影响。您应该使用gridUnload重新加载具有不同colModel的新配置。只有在loadonce:false !!!它才能工作!

http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods

跳这也有助于其他人:)

答案 1 :(得分:0)

以下是基于文本内容实现变量列宽的方法 - 将其添加到gridComplete事件中:

$('#parent').append('<span id="widthTest" />');

                gridName = this.id;

                $('#gbox_' + gridName + ' .ui-jqgrid-htable,#' + gridName).css('width', 'inherit');
                $('#' + gridName).parent().css('width', 'inherit');

                var columnNames = $("#" + gridName).jqGrid('getGridParam', 'colModel');
                var thisWidth;

                // Loop through Cols
                for (var itm = 0, itmCount = columnNames.length; itm < itmCount; itm++) {

                    var curObj = $('[aria-describedby=' + gridName + '_' + columnNames[itm].name + ']');

                    var thisCell = $('#' + gridName + '_' + columnNames[itm].name + ' div');
                    $('#widthTest').html(thisCell.text()).css({
                            'font-family': thisCell.css('font-family'),
                            'font-size': thisCell.css('font-size'),
                            'font-weight': thisCell.css('font-weight')
                        });
                    var maxWidth = Width = $('#widthTest').width() + 24;                    
                    //var maxWidth = 0;                      

                    // Loop through Rows
                    for (var itm2 = 0, itm2Count = curObj.length; itm2 < itm2Count; itm2++) {
                        var thisCell = $(curObj[itm2]);

                        $('#widthTest').html(thisCell.html()).css({
                            'font-family': thisCell.css('font-family'),
                            'font-size': thisCell.css('font-size'),
                            'font-weight': thisCell.css('font-weight')
                        });

                        thisWidth = $('#widthTest').width();
                        if (thisWidth > maxWidth) maxWidth = thisWidth;                        
                    }                    

                    $('#' + gridName + ' .jqgfirstrow td:eq(' + itm + '), #' + gridName + '_' + columnNames[itm].name).width(maxWidth).css('min-width', maxWidth);

                }

                $('#widthTest').remove();

一个工作示例:

http://jsfiddle.net/Ba5yK/17/

我希望有人觉得这很有用。

此致