删除行时jqGrid附加POST数据

时间:2015-11-01 19:08:09

标签: jquery jqgrid

我需要我的ro基于两个ID,Userid和certID。当添加和更新它工作正常,但删除时我需要这两个ID来删除我在数据库中的记录,但所有来自POST数据的是" id"和" oper",我需要将额外的certId添加到帖子数据。这是我的代码:

<!DOCTYPE HTML>
<html>
<head>
<title>jQGrid PHP inline Editing Tutorial</title>
    <link type="text/css" rel="stylesheet" href="plugins/jquery-ui/jquery-ui.min.css">
<!--<link rel='stylesheet' href='plugins/jqGrid/css/ui.jqgrid.css'/>-->
    <link type="text/css" rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" media="screen" href="plugins/jqGrid/css/ui.jqgrid-bootstrap.css" />

    <script type="text/ecmascript" src="plugins/jquery/jquery-2.1.0.min.js"></script>
    <script type="text/ecmascript" src='plugins/jqGrid/js/i18n/grid.locale-en.js'></script>
    <script type="text/ecmascript" src='plugins/jqGrid/js/jquery.jqGrid.min.js'></script>
    <script type="text/ecmascript" src="plugins/bootstrap-datepicker/js/bootstrap-datepicker.js"></script>
    <script type="text/ecmascript" src="plugins/bootstrap-typehead/js/bootstrap3-typeahead.min.js"></script>
    <link rel="stylesheet" type="text/css" media="screen" href="plugins/bootstrap-datepicker/css/bootstrap-datepicker.css" />
<meta charset="utf-8" />

<script>
    $.jgrid.defaults.width = 780;
    $.jgrid.defaults.responsive = true;
    $.jgrid.defaults.styleUI = 'Bootstrap';
</script>
</head>
<body>
<div style="margin-left:20px;">
    <table id="jqGrid"></table>
    <div id="jqGridPager"></div>
</div>
    <script type="text/javascript">

$(document).ready(function () {

    $("#jqGrid").jqGrid({
        url: 'getUserCertList.php',
        editurl: 'UserCertUpdate.php',
        mtype: "GET",
        datatype: "json",
        page: 1,
        colModel:   [
                        { label: 'userID',  name: 'id', editable: false, editrules: { edithidden: true }, hidden: true, width: 40, align: 'left' },
                        { label: 'certificationid', name: 'certificationid', key: true, editable: false, editrules: { edithidden: true }, hidden: true, width: 40, align: 'left' },
                        {
                           label: 'Certification',
                           name: 'certid',
                           width: 200,
                           editable: true,
                           edittype: "select",
                           editrules : { required: true},
                           editoptions : {dataUrl: "getCertList.php"}
                        },
                        {
                            label       :   'Date Certified',
                            name        :   'dateCertified',
                            width       :   80,
                            align       :   'center',
                            editable    :   true,
                            sortable    :   true,
                            sorttype    :   'date',
                            edittype    :   "text",
                            editrules : { required: true},
                            editoptions : {
                            // dataInit is the client-side event that fires upon initializing the toolbar search field for a column
                                // use it to place a third party control to customize the toolbar
                                dataInit: function (element) {
                                   $(element).datepicker({
                                        autoclose: true,
                                        format: 'yyyy-mm-dd',
                                        orientation : 'auto bottom'
                                    });
                                }
                            }
                        },
                        {
                            label       : 'Verified',
                            name        : 'verified',
                            width       : 40,
                            align       : 'center',
                            sorttype    : "number",
                            editable    : false,
                            edittype    : "checkbox",
                            editoptions : { value: "True:False" },
                            formatter   : "checkbox", formatoptions: { disabled: true }
                        },
                    ],
        loadonce : true,
        //onSelectRow: editRow, // the javascript function to call on row click. will ues to to put the row in edit mode
        viewrecords: true,
        height: 300,
        rowNum: 20,
        rownumbers: true, // show row numbers
        rownumWidth: 35, // the width of the row numbers columns
        pager: "#jqGridPager"
    });

        $('#jqGrid').navGrid("#jqGridPager",    {edit: false, add: false, del: true, refresh: true, view: true, search:false},
                             {delData: {
                                name: function() {
                                        var cert_id = $('#jqGrid').jqGrid('getGridParam', 'selrow');
                                        var value = $('#jqGrid').jqGrid('getCell', cert_id, 'colName');
                                        return value;
                                }
                            }
                   });
        $('#jqGrid').inlineNav('#jqGridPager',{edit: false,add: true,del: true,cancel: true,
                                editParams: {keys: true,},
                                addParams: {keys: true},
                            });


});

    </script>

</body>
</html>

1 个答案:

答案 0 :(得分:3)

网格有两个隐藏的列:'id'label: 'userID')和'certificationid',您key: true列使用'certificationid'

如果我正确理解您的问题,则来自两个值userIDcertificationid的组合指定了需要删除的项目。在这种情况下,最好更改从服务器返回的数据,并使用userID + "_" + certificationid作为服务器响应中id属性的值。顺便说一句,网格不需要隐藏'id'列。 id值将用于指定行id元素的<tr>属性值。因此,不需要在隐藏列的<td>中保存相同的信息。

我无法在服务器端进行建议的更改,然后您可以使用onclickSubmit回调来扩展数据。您提出的代码在编辑表单的选项中使用了delData,这是错误的:

$('#jqGrid').navGrid("#jqGridPager",
    {edit: false, add: false, del: true, view: true, search: false},
    {}, // edit parameters
    {}, // add parameters
    {   // del parameters
        onclickSubmit: function (options, delId) {
            // get the vale from 'id' (label: 'userID') column
            // and extend the postdata with name property
            return {
                name: $(this).jqGrid('getCell', delId, 'id')
            };
        }
    }
);