jqGrid 4.8.2 Изменения ширины сетки после выполнения columnChooser

Я использую jqGrid 4.8.2 и настроил сетку с фиксированной шириной. Но когда я изменяю отображаемые столбцы с помощью columnChooser, ширина сетки перенастраивается на общую ширину всех столбцов, и горизонтальная прокрутка исчезает. Я попытался сбросить ширину в параметре "done" columnChooser, но он не работает. Кажется, что после некоторой отладки изменение размера происходит после завершения "done" и после закрытия диалогового окна. Я создал кнопку для сброса ширины вручную, и это прекрасно работает, поэтому я знаю, что сброс ширины может произойти. Я просто не знаю, какое событие использовать для его запуска.

var defaultColModel = 
[   
    {name:'REQUESTEDDATE'
        ,index:'r.requestedDate'
        ,label:'Request Date'
        ,sorttype:"date"
        ,template: "date"
        ,search:true
        ,width:100
        ,hidden:false
    },
    {name:'VENDORNAME'
        ,index:'v.companyName'
        ,label:'Vendor'
        ,search:true
        ,stype:'text'
        ,width:150
        ,formatter:'showlink'
        ,formatoptions:{baseLinkUrl:'<cfoutput>#application.rootpath#</cfoutput>', addParam: '&page=dsp_request#vendorT', idName:'REQUESTID'}
        ,hidden:false
    },
    {name:'VENDORID'
        ,index:'r.vendorID'
        ,label:'Vendor ID'
        ,search:true
        ,stype:'text'
        ,width:100
        ,hidden:true
    },
    {name:'VENDORCONTACT'
        ,index:'vendorContact'
        ,label:'Vendor Contact'
        ,stype:'text'
        ,search:true
        ,width:100
        ,hidden:true
    } // there are many more cols.  Just showing a few to illustrate how they are defined.
]
var myGrid = jQuery("#contract_grid").jqGrid({
    url:            'cfc/com_ajxRequestNew.cfc?method=getReqJSON&returnformat=json',
    datatype:       'json',
    postData:       {filters: myFilters},
    mtype:          'POST',
    search:         true,
    colModel:       defaultColModel,
    gridview:       false, //added for IE 
    altRows:        true,
    emptyrecords:   'NO DATA FOUND',
    height:         400,
    width:          1200,
    sortname:       lastSortName,
    sortorder:      lastSortOrder,
    page:           lastPage,
    pager:          jQuery('#report_pager'),
    rowNum:         lastRowNum,
    rowList:        [10,20,50,100],
    viewrecords:    true,
    clearSearch:    false,
    caption:        "Contracts Dashboard",
    sortable:       true,
    shrinkToFit:    false,
    excel:          true,
    ajaxSelectOptions: {type: "GET"},
    gridComplete: function() {//removed code for simplicity}
});
jQuery("#contract_grid").navGrid('#report_pager',{
    edit:false,
    add:false,
    del:false,
    search:false,
    refresh:false
}).navButtonAdd("#report_pager",{
    caption: "Columns",
    buttonicon: "ui-icon-calculator",
    title: "Select and Reorder Columns",
    jqModal: true,
    onClickButton: function(e){

        $('#contract_grid').jqGrid('columnChooser', {
            dialog_opts: {
                modal: true,
                minWidth: 470,
                show: 'blind',
                hide: 'explode'
            },
            done : function (perm) {
              if (perm) {
                  // "OK" button are clicked
                  $('#contract_grid').jqGrid("remapColumns", perm, true);

                  // **UPDATED WORKING CODE**get the width set for the grid
                  var gwdth = $('#contract_grid').jqGrid("getGridParam","width");
                 // set the tblwidth so the grid does not get resized
                  $('#contract_grid').setGridParam({tblwidth:gwdth});

              } else {
                  // we can do some action in case of "Cancel" button clicked
              }
           }
        }); 
    }

});

1 ответ

Решение

Вы не разместили самую важную часть вашего кода: colModel, По крайней мере, важно знать определение столбца, который должен быть "фиксированным".

Столбец, который должен иметь фиксированную ширину, должен иметь fixed: true имущество. Это предотвратит изменение его ширины.

ОБНОВЛЕНО: Я все еще не уверен, что вы хотите реализовать, но я не знаю специфического поведения jqGrid 4.8.2, потому что я разрабатываю альтернативный jqGrid без форка, который вы можете попробовать просто включить URL к коду на GitHub (см. Здесь),

В общем, существуют два важных внутренних параметра: tblwidth а также width, tblwidth ширина тела сетки (<table>) и существуют width которая является общей шириной сетки: ширина внешнего div. Я полагаю, что jqGrid 4.8.2 делает неправильный выбор в вашем случае между tblwidth а также width, Я бы порекомендовал вам попробовать заменить var gwdth = $('#contract_grid').jqGrid("getGridParam","width"); внутри кода done обратный звонок в var gwdth = $('#contract_grid').jqGrid("getGridParam","tblwidth");

Бесплатная jqGrid сохраняет оригинал width который вы использовали при создании сетки в widthOrg опция jqGrid и использует следующую строку внутри columnChooser

$self.jqGrid("setGridWidth",
    !p.autowidth && (p.widthOrg === undefined || p.widthOrg === "auto" || p.widthOrg === "100%") ? p.tblwidth : p.width,
    p.shrinkToFit);

Вы не указали autowidth: true а ты использовал width: 1200 опция при создании сетки (которая будет widthOrg потом). Так что бесплатный jqGrid должен использовать tblwidth в вашем случае по умолчанию вместо width,

Другие вопросы по тегам