【问题标题】:Get all selected ids of jqgrid in external javascript function在外部javascript函数中获取jqgrid的所有选定ID
【发布时间】:2013-12-03 09:40:56
【问题描述】:

我在我的应用程序中使用了多选网格功能,它按预期工作。但问题是我需要在外部javascript函数的分页中获取所有选定的记录。下面是我的代码,

function createCommodity(){
$.ajax({
    url : 'commoditycategory.do?method=listCommodity' + '&random='
            + Math.random(),
    type : "POST",
    async : false,
    success : function(data) {
        $("#list2").jqGrid('GridUnload');
        var newdata = jQuery.parseJSON(data);
        var wWidth = $(window).width();
        var dWidth = wWidth * 0.7;
        var wHeight = $(window).height();
        var dHeight = wHeight * 0.5, idsOfSelectedRows = [];
    jQuery("#list2").jqGrid({
        data : newdata,
        datatype : "local",
        colNames : [ "id", "Commodity Code",
                "Commodity Description", "Commodity Category" ],
        colModel : [
                {
                    name : 'id',
                    index : 'id',
                    hidden : true,
                    editable : true
                },
                {
                    name : 'commodityCode',
                    index : 'commodityCode',
                    align : "center",
                    editable : true,
                    editrules : {
                        required : true
                    }
                },
                {
                    name : 'commodityDesc',
                    index : 'commodityDesc',
                    align : "center",
                    editable : true,
                    editrules : {
                        required : true
                    }
                },
                {
                    name : 'commodityCategoryId',
                    index : 'commodityCategoryId',
                    align : "center",
                    // hidden : true,
                    editable : true,
                    edittype : "select",
                    editoptions : {
                        dataUrl : 'commoditycategory.do?method=parentCategory'
                                + '&random=' + Math.random()
                    },
                    editrules : {
                        edithidden : true,
                        required : true
                    // custom : true
                    }
                } ],
        pager : "#pager2",
        rowNum : 10,
        rowList : [ 10, 20, 50 ],
        height : "230",
        width : dWidth,
        onSelectRow: function (id, isSelected) {
            var p = this.p, item = p.data[p._index[id]], i = $.inArray(id, idsOfSelectedRows);
            item.cb = isSelected;
            if (!isSelected && i >= 0) {
                idsOfSelectedRows.splice(i,1); // remove id from the list
            } else if (i < 0) {
                idsOfSelectedRows.push(id);
            }
        },
        loadComplete: function () {
            var p = this.p, data = p.data, item, $this = $(this), index = p._index, rowid, i, selCount;
            for (i = 0, selCount = idsOfSelectedRows.length; i < selCount; i++) {
                rowid = idsOfSelectedRows[i];
                item = data[index[rowid]];
                if ('cb' in item && item.cb) {
                    $this.jqGrid('setSelection', rowid, false);
                }
            }
        },
        multiselect : true,
        cmTemplate : {
            title : false
        }
    });
    $grid = $("#list2"),
    $("#cb_" + $grid[0].id).hide();
    $("#jqgh_" + $grid[0].id + "_cb").addClass("ui-jqgrid-sortable");
    cbColModel = $grid.jqGrid('getColProp', 'cb');
    cbColModel.sortable = true;
    cbColModel.sorttype = function (value, item) {
        return typeof (item.cb) === "boolean" && item.cb ? 1 : 0;
    };
    }
 });
}

到目前为止,它工作得很好。它持有跨分页选择的正确行。 而我需要获取所选rowids的外部JS函数包括分页,

function updateCommodity() {
    var grid = jQuery("#list2");
    var ids = grid.jqGrid('getGridParam', 'selarrrow'); // This only returns selected records in current page.
    if (ids.length > 0) {
        var html = "<table id='commodityTable' class='main-table' width='100%' border='0' style='border:none;border-collapse:collapse;float: none;'><thead><td class='header'>Commodity Code</td><td class='header'>Commodity</td><td class='header'>Action</td></thead><tbody>";
        for ( var i = 0, il = ids.length; i < il; i++) {
            var commodityCode = grid.jqGrid('getCell', ids[i],
                    'commodityCode');
            var commodityDesc = grid.jqGrid('getCell', ids[i],
                    'commodityDesc');
            html = html
                    + "<tr class='even' id='row" + i + "'><td><input type='text' name='commodityCode' id='geographicState"+i+"' class='main-text-box' readonly='readonly' value='" + commodityCode + "'></td>";
            html = html
                    + "<td><input type='text' name='commodityDesc' id='commodityDesc"+i+"' class='main-text-box' readonly='readonly' value='" + commodityDesc + "'></td>";
            html = html
                    + "<td><a style='cursor: pointer;' onclick='deleteRow(\"commodityTable\",\"row"
                    + i + "\");' >Delete</a></td></tr>";
        }
        html = html + "</tbody></table>";
        $("#commodityArea").html(html);
}
}

更新我有fiddled这个问题,以便更清楚地说明问题。

【问题讨论】:

    标签: javascript jquery jqgrid


    【解决方案1】:

    首先我想提醒您使用我在the answer 中发布的代码。

    我看到您的问题的解决方案非常简单。 jqGrid 的选项列表可以很容易地扩展。如果您只是在选项列表中包含新属性

    ...
    data : newdata,
    datatype : "local",
    idsOfSelectedRows: [],
    ...
    

    您将不需要更多定义变量idsOfSelectedRows(参见代码中的var dHeight = wHeight * 0.5, idsOfSelectedRows = []; 行)。要访问新选项,您可以使用

    var ids = grid.jqGrid('getGridParam', 'idsOfSelectedRows');
    

    而不是var ids = grid.jqGrid('getGridParam', 'selarrrow');。要使 onSelectRowloadComplete 回调的代码与 idsOfSelectedRows 作为 jqGrid 选项一起使用,您只需修改回调的第一行来自

    var p = this.p, ...
    

    var p = this.p, idsOfSelectedRows = p.idsOfSelectedRows, ...
    

    就是这样。

    更新:请参阅http://jsfiddle.net/OlegKi/s2JQB/4/ 作为固定演示。

    【讨论】:

    • 我在选择行时收到此错误,ReferenceError: idsOfSelectedRows is not defined p = this.p, item = p.data[p._index[id]], i = $.inArray(id, idsOfSelectedRows)
    • 我已经解决了这个问题供您参考。请参阅我的问题中的更新部分。
    • 非常感谢@Oleg,我已经通过返回选定的rowids并使用getLocalRow从中获取数据来进行管理,如下所示,var row = grid.getLocalRow(selectedIDs[i]);var commodityCode = row.commodityCode;var commodityDesc = row.commodityDesc;
    • @VinothKrishnan:我写的是要访问idsOfSelectedRows,你应该 1) 在选项列表中添加 idsOfSelectedRows: [] 2) 将 idsOfSelectedRows = p.idsOfSelectedRows 包括到 both onSelectRowloadComplete 回调之前你使用idsOfSelectedRows。您在评论中发布的代码在您设置idsOfSelectedRows 之前使用它(在i = $.inArray(id, idsOfSelectedRows) 中)。或者,您可以将回调中 idsOfSelectedRows 的所有用法替换为 this.p.idsOfSelectedRows
    • @VinothKrishnan:请参阅jsfiddle.net/OlegKi/s2JQB/4 作为固定演示。我也更改了网格中的其他一些属性,包括colModel
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多