Можно ли сделать jqGrid растянутым до 100%? - PullRequest
39 голосов
/ 16 июня 2010

Можно ли сделать так, чтобы ширина jqGrid была равна 100%?Я понимаю, что ширина столбцов должна быть абсолютным размером в пикселях, но мне еще предстоит найти что-нибудь для установки относительной величины ширины фактической сетки.Например, я хочу установить ширину на 100%.Вместо 100% он использует нечетный размер 450 пикселей.На странице больше горизонтального пространства, но с шириной столбцов и тому подобным, контейнер (только из сетки) будет прокручиваться горизонтально.Есть ли способ обойти это?

Ответы [ 14 ]

0 голосов
/ 20 апреля 2018

Я заметил, что только комбинация всех 3-х ответов дана, то есть ответ Джона Джона , ответ Бхаргава и Ответ Молсона помог мне добиться реального автоматического изменения размера.

Итак, я создал некоторый код, который использует все преимущества, см. Фрагмент ниже. Я также улучшил его, чтобы вы могли передавать один объект сетки или массив сеток для изменения размера.

Если вы попробуете это, убедитесь, что вы

  1. нажмите Фрагмент кода запуска и
  2. затем нажмите «Полная страница» кнопку ссылки в верхнем правом углу.

Измените размер окна и посмотрите, как сетки меняют свой размер, и автоматически выровняйте:

// see: https://free-jqgrid.github.io/getting-started/
// CDN used: https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid
$(function() {

  // pass one single grid, or an array of grids
  function resizeGrid(jqGridObj) {
  
    var $gridArray = Array.isArray(jqGridObj) ? jqGridObj : [jqGridObj];
    for(let i=0; i<$gridArray.length; i++) {
      var $grid=$gridArray[i],
      newWidth = $grid.closest(".ui-jqgrid").parent().width();
      $grid.jqGrid("setGridWidth", newWidth, true);
    }
    
  };
  
  // template for the 2 grids
  function createGrid(gridName, gridData) {
    var gridObj=$("#"+gridName); gridObj.jqGrid({
      autowidth: true, height: 45, 
      colNames: ['First name', 'Last name', 'Updated?'],
      colModel: [{name: "firstName"}, {name: "lastName"}, {name: "updated"}],
      data: gridData,
      loadComplete: function() { 
        // resize on load
        resizeGrid(gridObj);
      }      
    });
    return gridObj;
  }

  // instantiate Grid1
  var  data1 = [
      { id: 10, firstName: "Jane", lastName: "Doe", updated: "no"},
      { id: 20, firstName: "Justin", lastName: "Time", updated: "no" }
    ];    
  var gridObj1=createGrid("grid1", data1);

  // instantiate Grid2
  var  data2 = [
      { id: 10, firstName: "Jane", lastName: "Smith", updated: "no"},
      { id: 20, firstName: "Obi-Wan", lastName: "Kenobi", updated: "no" }
    ];    
  var gridObj2=createGrid("grid2", data2);
  
  function debounce(fn, delay) {
    delay || (delay = 200);
    var timer = null;
    return function () {
      var context = this, args = arguments;
      clearTimeout(timer);
      timer = setTimeout(function () {
        fn.apply(context, args);
      }, delay);
    };
  }
  
 function throttle(fn, threshhold, scope) {
    threshhold || (threshhold = 200);
    var last,
        deferTimer;
    return function () {
      var context = scope || this;

      var now = +new Date,
          args = arguments;
      if (last && now < last + threshhold) {
        // hold on to it
        clearTimeout(deferTimer);
        deferTimer = setTimeout(function () {
          last = now;
          fn.apply(context, args);
        }, threshhold);
      } else {
        last = now;
        fn.apply(context, args);
      }
    };
  }
    
  // change size with window for both grids
  jQuery(window).resize(throttle(function(){
    resizeGrid([gridObj1, gridObj2]);
   }));
  
});
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>Resizing jqGrid example</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/themes/redmond/jquery-ui.min.css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.15.2/css/ui.jqgrid.min.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.15.2/jquery.jqgrid.min.js"></script>

<table id="grid1"></table>
<br/>
<table id="grid2"></table>

Примечание: Хотя этот пример прост, если у вас есть более сложные jqGrids, вам потребуется регулирование или подавление (2 функции throttle и debounce взяты оттуда), иначе событие изменения размера может быть очень медленным. Перейдите по ссылке, чтобы узнать больше об этом. Я предпочитаю регулирование в этом случае, потому что оно выглядит более плавным, но я включил обе функции, чтобы вы могли использовать их при необходимости в своем коде.

В моем реальном коде я нуждался в регулировании, иначе изменение размера становилось слишком медленным. Фрагмент кода уже включает обработчик удушения с порогом по умолчанию 200 мс. Вы можете поэкспериментировать с этим, например, если вы замените throttle на debounce во фрагменте кода, т.е.

jQuery(window).resize(debounce(function(){
    resizeGrid([gridObj1, gridObj2]);
 }));
0 голосов
/ 08 августа 2017

Попробуйте это,

Заменить width: 1100 на autowidth: true,

0 голосов
/ 05 мая 2017

Я сделал это и работал как шарм.

$(document).ready(function () { $("#jQGridDemo").setGridWidth(window.innerWidth - offset); }); Я поставил смещение 50

0 голосов
/ 22 июня 2010

Нельзя указывать ширину в процентах, а если вы хотите в соответствии с разрешением экрана, установите следующее: var w = screen.width и затем используйте эту переменную в опции ширины jqgrid.

Надеюсь, это будет полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...