【问题标题】:jqGrid 4.8.2 Grid width changes after columnChooser is donejqGrid 4.8.2 columnChooser 完成后网格宽度发生变化
【发布时间】:2015-06-05 13:56:02
【问题描述】:

我正在使用 jqGrid 4.8.2 并设置了固定宽度的网格。但是,当我使用 columnChooser 修改显示的列时,网格的宽度会重新调整为所有列的组合宽度,并且水平滚动消失了。我尝试在“完成”columnChooser 参数中重置宽度,但它不起作用。经过一些调试后,似乎调整大小发生在“完成”完成并且对话框窗口关闭之后。我创建了一个按钮来手动重置宽度,它工作得很好,所以我知道可以重置宽度。我只是不知道使用哪个事件来触发它。

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
              }
           }
        }); 
    }

});

【问题讨论】:

    标签: jquery jqgrid column-chooser


    【解决方案1】:

    您没有发布代码中最重要的部分:colModel。至少知道应该“固定”的列的定义很重要。

    应具有固定宽度的列应具有fixed: true 属性。它将防止其宽度发生变化。

    更新:我仍然不确定你想要实现什么,但我不知道 jqGrid 4.8.2 的具体行为,因为我开发了替代 fork free jqGrid,你可以尝试一下包括 GitHub 上代码的 URL(请参阅here)。

    一般存在两个重要的内部参数:tblwidthwidthtblwidth 是网格主体的宽度(&lt;table&gt;),还有width 是网格的 宽度:外部 div 的宽度。我想 jqGrid 4.8.2 在您的情况下在tblwidthwidth 之间做出了错误的选择。我建议您尝试将done 回调代码中的var gwdth = $('#contract_grid').jqGrid("getGridParam","width"); 替换为var gwdth = $('#contract_grid').jqGrid("getGridParam","tblwidth");

    Free jqGrid 保存 original width,您在 jqGrid 的 widthOrg 选项中创建网格时使用它,它在 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

    【讨论】:

    • 我用 colModel 的一部分更新了代码。我不想强制使用固定的列宽。我想要一个固定的网格宽度,溢出由水平滚动处理。这一切都很好。我的问题是 columnChooser 窗口关闭后触发的任何内容。它删除了网格宽度,因此所有内容都显示在屏幕上,并且水平滚动消失了。我想附加到任何正在发射的东西上,并确保重置网格宽度。我只是不知道那是什么。
    • @user2754423:我发布了 UPDATED 部分答案。我建议您尝试使用tblwidth 参数而不是width。我建议您直接从 GitHub 尝试 Free jqGrid(您只需临时更改 3 个 URL)并查看默认情况下我的 jqGrid 分支是什么。
    • 非常感谢您的帮助!将 tblwidth 设置为 done 内部的宽度值就可以了。我将发布工作代码。
    • @Oleg 你是老板。更新到 4.8.2 后,您将我保存在多选和此问题上。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多