【问题标题】:jQgrid: multiselect true - make each row checked by default on page loadjQgrid: multiselect true - 在页面加载时默认检查每一行
【发布时间】:2015-05-20 09:03:55
【问题描述】:
jQuery("#grid").jqGrid({
    url:call_url,
        datatype: "json",
    height: 'auto',
    rowNum: 20,
    rowList: [20,30,40],
    colNames:[<?php echo $col;?>],
    colModel:[
                {name:'USER_ID',index:'USER_ID', align:'center',search:false,hidden:true,key:true},
        {name:'PROJECT_NAME',index:'PROJECT_NAME', align:'center',search:false,hidden: true},
        {name:'EMP_NAME',index:'EMP_NAME', sortable:true,summaryType:'count',summaryTpl : 'Total ({0}) Resource Hours' },
        <?php for($i=1;$i<=count($cal_arr);$i++) {?>
        {name:'<?php echo $i;?>',index:'<?php echo $i;?>',search:false,align:"center",sortable:false ,width:80 },
        <?php } ?>
    ],
    pager: "#page",
        multiselect: true,
    shrinkToFit :true,
    autowidth: true,
    viewrecords: true,
    grouping: true, 
    groupingView : { groupField : ['PROJECT_NAME'], 
                    groupColumnShow : [false], 
                    groupText : ['<b>{0}</b>'],
                    groupCollapse : false, 
                    groupOrder: ['asc'], 
                    groupSummary : [true], 
                    showSummaryOnHide: true,
                    groupDataSorted : true },
    sortname: 'EMP_NAME',
    caption: "Programatically block selection of some grid row',
    gridComplete: function () {
                    var recs = $("#grid").getGridParam("records");
                    $( ".mycontent" ).remove();
                    if (recs == 0 || recs == null) {
                        $('#grid').after("<div class='mycontent' style='color:red;text-align:center'>No Record Found</div>");
                        $("#btn_submit").hide();
                    }
            },


        loadComplete: function () {
            $("#cb_grid").click(); 
        },

            rowattr: function (item) {
                    if (parseInt(item.ID) == 1) {
                        return {"class": "ui-state-disabled ui-jqgrid-disablePointerEvents"};
                    }
            },

            //prevent selection of disabled rows
            beforeSelectRow: function (rowid, e) {
                if ($(e.target).closest("tr.jqgrow").hasClass("ui-state-disabled")) {
                    return false;   // not allow select the row
                }
                return true;    // allow select the row
            }

})

上面的代码是这样做的

必填项

使用带有multiselect:true 的jqGrid 如何设置在页面加载时默认检查的每一行? jQgrid 版本 - 4.6

【问题讨论】:

  • 请包括 always 哪个 jqGrid 分支以及您使用的 jqGrid 版本。不同的版本有不同的可能性。如果您仍然使用 jqGrid 4.6,那么您可以加载所有选择的数据,如果 datatype: "local"deselectAfterSort: falsemultiselect: trueselarrrow 数组填充了需要在加载期间选择的行的 ID。
  • @Oleg,在我的例子中是datatype: "json",multiselect: true。如何获取行的 id 并在第一次加载页面时默认保持选中状态?

标签: jquery jqgrid


【解决方案1】:

如果您使用带有datatype: "json" 且没有loadonce: true 选项的jqGrid 4.6,那么您就没有那么多可能性了。您必须枚举网格的所有多选复选框并在那里选择。所以你可以做

$("#cb_grid").click(); // "grid" is the grid id

例如在loadComplete 回调内部。如果您考虑所有情况,您可能会添加更多附加条件,因为在排序、分页等时会调用loadComplete

更新:您的代码在rowattr 内有$('.cbox').attr('checked', true); 行。以您不更改行的复选框的方式,该行尚不存在。取而代之的是,您在列标题的复选框上将checked 属性设置为错误值true 而不是"checked"。您应该删除该行以便能够使用我建议您的代码:

loadComplete: function () {
    $("#cb_" + this.id).click();
},
rowattr: function (item, rd, rowid) {
    //$('.cbox').attr('checked', true);
    if (parseInt(rowid) === 10) {
        return {"class": "ui-state-disabled ui-jqgrid-disablePointerEvents"};
    }
},
beforeSelectRow: function (rowid, e) {
    if ($(e.target).closest("tr.jqgrow").hasClass("ui-state-disabled")) {
        return false;   // not allow select the row
    }
    return true;    // allow select the row
}

查看演示:http://jsfiddle.net/OlegKi/aagxejj5/4/

【讨论】:

  • Oleg:我用你的小提琴代码替换了我的代码,但它仍然没有选中该行的所有复选框,而只选中了cb_grid。负责保持所有行被选中的代码是loadComplete: function () { $("#cb_" + this.id).click(); },但不幸的是它对我不起作用
  • @Slimshadddyyy:我向您发布了有效的演示。所以您描述的问题是不是一些常见的 jqGrid 问题,而是您的特定代码中的问题。您可以修改演示 jsfiddle.net/OlegKi/aagxejj5/1 以便重现问题,保存并将 URL 发给我。只有有不起作用的演示,我才能帮助你。
  • 请找到小提琴jsfiddle.net/aagxejj5/25。我已经用你的小提琴添加了我的完整代码。具体代码后跟loadComplete
  • @Slimshadddyyy:由于语法错误,您的演示没有显示任何内容。将"&lt;?php echo SITE_URL."someValidUrl"?&gt;" 替换为new_call_url ="&lt;?php echo SITE_URL.'someValidUrl'?&gt;";new_call_url ="someValidUrl" 后,它可以正常工作,没有任何问题:jsfiddle.net/OlegKi/aagxejj5/26
  • 您的代码似乎正确,但我无法弄清楚为什么它不适合我的问题。过去几个小时我真的很困扰你。感谢您的真诚帮助。接受你的回答。
猜你喜欢
  • 1970-01-01
  • 2015-01-18
  • 2018-09-08
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多