jqGrid在单元格编辑上发送错误的id

时间:2015-06-12 17:43:01

标签: jquery ajax json jqgrid

我有一个从处理程序获取2行的网格,我尝试识别键列,这里我将其从id重命名为xqz和rr45。当我编辑一个Cell时,我的handdler得到的id为1,它似乎是rownumber而不是实际的id。

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>jQgrid - ASPX</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <!--<script src="http://asp2d:1138/jquery-1.8.3.js"></script>-->
    <!--<script src="http://asp2d:1138/jquery-ui-1.9.2.custom.js"></script>-->
    <script type="text/javascript" src="http://asp2d:1138/grid.locale-en.js"></script>
    <script type="text/javascript" src="http://asp2d:1138/jquery.jqGrid.min.js"></script>
    <link rel="stylesheet" type="text/css" media="screen" href="http://asp2d:1138/jquery-ui-1.9.2.custom.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="http://asp2d:1138/ui.jqgrid.css" />
    <script>
        $(function() {
            $("#list").jqGrid({
                url: "/capplanning/SitePages/jsonhandler.aspx?wherefrom=Category One",
                datatype: "json",
                mtype: "GET",

                colNames: ["xyz", "category_type", "category_value"],
                colModel: [{
                    name: "rr45",
                    sortable: true,
                    key: true,
                    editable: true,
                    hidden: true,
                    edithidden: false
                }, {
                    name: "category_type",
                    sortable: true,
                    editable: false
                }, {
                    name: "category_value",
                    sortable: true,
                    editable: true
                }],
                pager: "#pager",
                caption: "Category One",
                loadonce: "true",
                height: "100%",
                cellEdit: true,
                cellsubmit: "remote",
                cellurl: "/capplanning/SitePages/jsonhandler.aspx?editedgrid=editcategory1",
                autowidth: true,
                rowNum: 9999,
                gridview: true,
                multiselect: false
                    /*rowList:[10,15,20]*/
            });
            $("#list").jqGrid('filterToolbar', {
                stringResult: true,
                searchOnEnter: false
            });
            $("#list").jqGrid('navGrid', '#pager', {
                edit: false,
                add: true,
                del: true
            });

            $("#list").jqGrid('navButtonAdd', '#pager', {
                caption: '',
                title: 'Show/Hide Filters',
                buttonicon: 'ui-icon-arrowthickstop-1-e',
                onClickButton: function() {
                    this.toggleToolbar();
                    if ($.isFunction(this.p._complete)) {
                        if ($('.ui-search-toolbar', this.grid.hDiv).is(':visible')) {
                            $('.ui-search-toolbar', this.grid.fhDiv).show();
                        } else {
                            $('.ui-search-toolbar', this.grid.fhDiv).hide();
                        }
                        this.p._complete.call(this);
                        fixPositionsOfFrozenDivs.call(this);
                    }
                }
            });
            $("#list")[0].toggleToolbar();

        });
    </script>
</head>

<body>
    <table id="list">
        <tr>
            <td></td>
        </tr>
    </table>
    <div id="pager"></div>
</body>

</html>

JSON

{
    "rows": [{
        "id": "2",
        "cell": ["2", "CategoryOne", "Maintenancedd"]
    }, {
        "id": "3",
        "cell": ["3", "CategoryOne", "Maintenance"]
    }, {
        "id": "4",
        "cell": ["4", "CategoryOne", "New Growth"]
    }]
}

在我的编辑处理程序中,它出现

Key = category_value  Value = Maintenance
Key = id  Value = **1**
Key = oper  Value = edit

1 个答案:

答案 0 :(得分:1)

我认为这里有一个明确的错误,jqGrid加载行id作为序号而不是通过主键列绑定的字段,为了解决这个问题,我已经实现了只能被描述为脏黑客的东西!

首先,在绑定网格模型时创建客户端事件处理程序:

ClientSideEvents cev = new ClientSideEvents() {
    GridInitialized = "loadComplete"
};

&#34; loadComplete&#34;是我的主.js堆栈中的一个javascript函数:

function loadComplete() {
    $('tr.jqgrow[role="row"]').each(function (i, e) {
        var Id = $(e).children().first().attr("title");
        $(e).attr("id", Id);
    });
};

这基本上允许网格完成其渲染,然后通过查找第一列(假设这是ID字段,在我的情况下,它总是如此)并设置行&#34; id&#34;属性为&#34;标题&#34;第一个子节点中的属性(确实获得了正确的值),从而将行ID设置为正确的值

这个网格真的是一堆狗便便.. :(