【问题标题】:jqgrid column width autojqgrid列宽自动
【发布时间】:2014-03-20 08:10:25
【问题描述】:

有没有办法让jqgrid的列宽根据该列的内容动态变化?我使用了 shrinkToFit 和 autoWidth,但没有一个对我有用。我使用 jqgrid 4.5.2。我已经搜索并阅读了其他问题,但这些对我不起作用。也许有一个小部件可以做到这一点。如果您能帮助我,我将不胜感激。

【问题讨论】:

标签: jqgrid jqgrid-formatter


【解决方案1】:

colModel: [ { name: "f_name",index:"f_name",width:'100%'} ]

【讨论】:

    【解决方案2】:

    以下是我如何根据列内容实现 jqGrid 列宽。将此添加到 gridComplete 事件中。

    $(this).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/

    希望这会有所帮助,

    保罗

    【讨论】:

      【解决方案3】:

      这是一个很好的解决方案,但在重新调整大小时列宽会跳到初始宽度。 这是我修改后的解决方案,作为单独的功能。设计用于将 shrinkToFit 设置为 false,并且只触发一次:

      function setColumnWidths(gridName) {
          if ($('#' + gridName).attr('columnsSet')=='true') return;
      
          $('body').append('<span id="widthTest">WIDTHTEST</span>');
          $('#gbox_' + gridName + ' .ui-jqgrid-htable,#' + gridName).css('width', 'inherit');
          $('#' + gridName).parent().css('width', 'inherit');
      
          var containerWidth=$('#' + gridName).width() - 20;
          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 = $('#widthTest').width() + 40;
              //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;
              }
              if (maxWidth > containerWidth) maxWidth=containerWidth;
              $("#" + gridName).jqGrid('setColProp','amount',{width: maxWidth});
              var gw = $("#" + gridName).jqGrid('getGridParam','width');
              $("#" + gridName).jqGrid('setGridWidth',gw,true);
              $('#' + gridName + ' .jqgfirstrow td:eq(' + itm + '), #' + gridName + '_' + columnNames[itm].name).width(maxWidth).css('min-width', maxWidth);
      
          }
          $('#widthTest').remove();
          $('#' + gridName).attr('columnsSet','true');
      }
      

      【讨论】:

        【解决方案4】:

        我不确定这是否早些回答,但下面是我实施的解决方案,它正在工作。只需以百分比形式提供列宽,所有列的总和应达到 100%。但我不确定如何在运行时处理添加/删除列。

        我也在努力,并将更新所有内容。

         columns: [
             { text: 'CheckBox', datafield: 'ProjectSubstantialPOUADetailsID', width: '10%' },
             { text: 'Area/Phase Substantial', datafield: 'SubstantialPOUA', width: '30%' },
        
             { text: 'Type', datafield: 'SubstantialTypeName', width: '15%' },
             { text: 'Achieved', datafield: 'DateAchieved', width: '15%', cellsformat: 'd', formatter: "date", formatoptions: { srcformat: "ISO8601Long", newformat: "m/d/Y" } },
             { text: 'PL Final', datafield: 'DateFinal', width: '15%', cellsformat: 'd' },
             { text: 'Warranty?', datafield: 'Warranty', width: '15%', columntype: 'checkbox' }
             ]
        

        谢谢 鲁士

        【讨论】:

          【解决方案5】:

          pphillips001 答案对我有用,但是当网格增长时调整大小会变慢。我刚刚更新了逻辑,现在性能很好。

          function setColumnWidths(gridName) {
              if ($('#' + gridName).attr('columnsSet')=='true') return;
          
              $('body').append('<span id="widthTest">WIDTHTEST</span>');
              $('#gbox_' + gridName + ' .ui-jqgrid-htable,#' + gridName).css('width', 'inherit');
              $('#' + gridName).parent().css('width', 'inherit');
          
              var containerWidth=$('#' + gridName).width() - 20;
              var columnNames = $("#" + gridName).jqGrid('getGridParam', 'colModel');
              var thisWidth = 0;
          
              // 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 = $('#widthTest').width() + 40;
                  //var maxWidth = 0;                      
          
                  // Loop through Rows
                  var maxText = 0;
                  var theCell;
                  for (var itm2 = 0, itm2Count = curObj.length; itm2 < itm2Count; itm2++) {
                      thisCell = $(curObj[itm2]);
                      if (maxText < thisCell.text().length) {
                          maxText = thisCell.text().length;
                          theCell = thisCell;
                      }
                  }
                  if (theCell !== undefined) {
                      $('#widthTest').html(theCell.html()).css({
                          'font-family': theCell.css('font-family'),
                          'font-size': theCell.css('font-size'),
                          'font-weight': theCell.css('font-weight')
                      });
          
                      thisWidth = $('#widthTest').width() + 5;
                  }
                  if (thisWidth > maxWidth) maxWidth = thisWidth;
              if (maxWidth > containerWidth) maxWidth=containerWidth;
              $("#" + gridName).jqGrid('setColProp','amount',{width: maxWidth});
              var gw = $("#" + gridName).jqGrid('getGridParam','width');
              $("#" + gridName).jqGrid('setGridWidth',gw,true);
              $('#' + gridName + ' .jqgfirstrow td:eq(' + itm + '), #' + gridName + '_' + columnNames[itm].name).width(maxWidth).css('min-width', maxWidth);
          
          }
          $('#widthTest').remove();
          $('#' + gridName).attr('columnsSet','true');
          

          }

          【讨论】:

            猜你喜欢
            • 2011-01-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多