在外部文件Jqgrid上编辑

时间:2013-05-01 03:34:23

标签: jqgrid

我在使用JQgrid生成的网格上显示了一些数据。我想在单独的PHP文件上编辑选定的行。我需要的是,当我单击Jqgrid上的一行时,我获得了所选行的ID,并将其作为参数发送到该单独的PHP文件,通过按下不属于网格的按钮来调用该文件,如果他按下编辑按钮并且在JQGrid上没有选择任何行,也会警告用户。有人知道怎么做吗?

下面是我为JQGrid创建的JQgrid表的代码,其中的按钮重定向到另一个文件:

        <div>
           <h1>Manejo de alumnos</h1>
           <table id="list"></table><!--Grid table-->
           <div id="pager"></div>  <!--pagination div-->
        </div>
    <br>    

    <a href="http://localhost/ProyectoNetbeans/CodeIgniter_2.1.3/index.php/Alumnos_controller/editData" class="btn btn-primary">Editar alumno</a> 

以下是我的JQgrid的代码:

$(document).ready(function (){
        jQuery("#list").jqGrid({
            url: 'http://localhost/ProyectoNetbeans/CodeIgniter_2.1.3/index.php/Alumnos_controller/loadData',
            mtype : "post",             //Ajax request type. It also could be GET
            datatype: "json",            //supported formats XML, JSON or Arrray
            colNames:['Expediente','Primer apellido','Segundo apellido', 'Nombre','Cédula'],       //Grid column headings
            colModel:[
                {name:'expediente',index:'expediente', width:300, editable:true, edittype:'text'},
                {name:'primerApellido',index:'primerApellido', width:300, editable:true, edittype:'text'},
                {name:'segundoApellido',index:'segundoApellido', width:300, editable:true, edittype:'text'},
                {name:'nombre',index:'nombre', width:300, editable:true, edittype:'text'},
                {name:'cedula',index:'cedula', width:300, editable:true, edittype:'text'}

            ],
            pager: '#pager',
            rowNum:10,
            rowList:[15,30],
            sortname: 'primerApellido',
    reloadAfterSubmit: true,
            sortorder: 'asc',
            viewrecords: true,
    postData: {expediente:"expediente"},
            caption: 'Alumnos'
        }).navGrid('#pager',{edit:false,add:false,del:true},
            {//EDITAR
                url:"http://localhost/ProyectoNetbeans/CodeIgniter_2.1.3/index.php/Alumnos_controller/deleteData"
            },
            {
                //AGREGAR
              },
              {// DELETE
                jqModal:false,
                reloadAfterSubmit:true,
                savekey: [true,13],
                drag: true,
                closeOnEscape:true,
                closeAfterAdd:true,
                url:"http://localhost/ProyectoNetbeans/CodeIgniter_2.1.3/index.php/Alumnos_controller/deleteData",
                onclickSubmit:function(params, postdata){
                    var index=$("#list").getGridParam("selrow");                            
        var rowId = jQuery('#list tr:eq('+index+')').attr('ID');
        var dataFromTheRow = jQuery('#list').jqGrid ('getRowData', rowId);
        var dataFromCellByColumnName = jQuery('#list').jqGrid ('getCell', rowId, 'expediente');
        return { expediente: dataFromCellByColumnName };

                }

    },  

            {multipleSearch : false}, // enable the advanced searching
    {closeOnEscape:true} /* allow the view dialog to be closed when user press ESC key*/

        );
    });

2 个答案:

答案 0 :(得分:0)

每次选择行时,您都可以连接一个事件,您可以通过以下方式将信息传递到编辑按钮:

 onSelectRow: function(id){
   //pass id to button

然后,如果

选择了行,则可以测试何时按下编辑按钮
if ($('#gridName').jqGrid('getGridParam', 'selrow')) {
...
}
else {
  return false; 
}

答案 1 :(得分:0)

我能够使用Mark的答案并进行一些调查来解决这个问题。首先,您需要传递一些将由按钮使用的参数,此参数将取决于您的网格逻辑。获取参数的代码如下,您需要将其放在包含ColModel的部分中:

                onSelectRow: function(id)
            {
                var dataFromCellByColumnName="";
                var index=$("#list").getGridParam("selrow");
                var rowId = jQuery('#list tr:eq('+index+')').attr('ID');
                var dataFromTheRow = jQuery('#list').jqGrid ('getRowData', rowId);
                dataFromCellByColumnName = jQuery('#list').jqGrid ('getCell', rowId, 'expediente');
                setExpediente(dataFromCellByColumnName);

            }

在这种特殊情况下,我将网格的“expediente”字段发送到“setExpediente”函数。 setExpediente函数是:

        var expediente="";
        function setExpediente(elExpediente)
        {
            expediente = elExpediente;
        }

请注意,变量“expediente”是一个全局变量。然后,您需要创建一个将使用全局变量“expediente”的函数。我做了这个:

function revisarSeleccion()
        {
            if (expediente=="")
            {
                alert("Seleccione una fila")
            }
            else
            {
                alert(expediente);    
            }

        }

这将检查变量“expediente”是否为空白,并根据结果做出决定。

感谢Mark对此的帮助。