Quiero
agradecer la oportunidad que se me da de exponer estos sencillos código
los cuales estoy seguro serán de gran utilidad para muchos
programadores:
1)Como primer paso para guardar datos directamente
del jqgrid hacia una base de datos ya sea mysql, postgresql, etc debes
proceder a hacer la descarga del jqgrid desde esta dirección web:
http://www.trirand.com/blog/?page_id=6
2) Segundo paso debes descomprimir el archivo y colocarlo en el directorio web del proyecto que estes trabajando.
(Segun
la versión de servidor web que estés trabajando, si utilizas
WAMPSERVER estas en www, si utilizas XAMPP estas en htdocs.)
3)
Tercero utilizando el editor web de tu preferencia crea una sencilla
página HTML y agregas el siguiente código (Ojo voy a proceder a explicar
el código pero solo las partes más importantes del mismo).
Codigo:
--------
<link rel="stylesheet" type="text/css" media="screen" href="css/ui-lightness/jquery-ui-1.8.16.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="css/ui.jqgrid.css" />
<script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="js/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$("#grps").jqGrid({
url:'Carga_Datos.php',
datatype: 'json',
mtype: 'GET',
colNames: ['Id_Registro','Codigo_Cuenta','Centro_Costo', 'Doc_Asoc','Tipo', 'Descripcion', 'Monto'],
colModel: [
{ name: 'Id_Registro', index: 'Id_Registro', width: 100, align: 'left',editable: true},
{ name: 'Codigo_Cuenta', index: 'Codigo_Cuenta', width: 100, align: 'left',editable: true},
{ name: 'Centro_Costo', index: 'Centro_Costo', width: 100, align: 'left',editable: true },
{ name: 'Doc_Asoc', index: 'Doc_Asoc', width: 100, align: 'left',editable: true },
{ name: 'Tipo', index: 'Tipo', width: 100, align: 'left',editable: true},
{ name: 'Descripcion', index: 'Descripcion', width: 200, align: 'left',editable: true},
{ name: 'Monto', index: 'Monto', width: 200, align: 'left',editable: true},
],
pager: '#pgrps',
rowNum:15,
rowList:[10,25,50,100],
autowidth: true,
sortname: 'Id_Registro',
sortorder: 'desc',
viewrecords: true,
width: "98%",
height: "100%",
editurl: "inlineEdit.php",
caption: 'Action Plan List'
});
$("#Editar").click(function()
{
var gr = jQuery("#grps").jqGrid('getGridParam','selrow');
if( gr != null )
{
jQuery("#grps").jqGrid('editGridRow',gr,{height:280,reloadAfterSubmit:false,closeAfterEdit:true});
}else{
alert("Seleccione el Registro a editar");
}
});
$("#Agregar").click(function()
{
jQuery("#grps").jqGrid('editGridRow',"new",{height:280,reloadAfterSubmit:false,closeAfterAdd:true});
});
$("#Eliminar").click(function(){
var gr = jQuery("#grps").jqGrid('getGridParam','selrow');
if( gr != null ) jQuery("#grps").jqGrid('delGridRow',gr,{reloadAfterSubmit:false});
else alert("Seleccione el Registro a borrar!"); });
});
</script>
</head>
<body>
<h1>Title-Time</h1>
<table id="grps"></table>
<div id="pgrps"></div>
<input type="BUTTON" id="Editar" name="Editar" value="Editar" />
<input type="BUTTON" id="Agregar" value="Agregar" />
<input type="BUTTON" id="Eliminar" value="Eliminar" />
</body>
--------
Explicación:
------------------
Hojas de estilo:
-------------------------
<link rel="stylesheet" type="text/css" media="screen" href="css/ui-lightness/jquery-ui-1.8.16.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="css/ui.jqgrid.css" />
Librerías a ser invocadas para poder trabajar con el grid:
----------------------------------------------------------------------------------
<script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="js/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>
<script type="text/javascript">
url:'Carga_Datos.php':
-------------------------------
Es
la ruta y nombre del archivo PHP que será el que nos permite leer y
cargar datos desde la base de datos (el código del mismo lo pondré un
poco más abajo).
datatype: 'json':
----------------------
Indica el tipo de información que regresara el servidor puede ser XML también.
mtype: 'GET'
-------------------
Indica como se hará la petición ajax, “POST” o “GET”
colNames: ['Id_Registro','Codigo_Cuenta','Centro_Costo', 'Doc_Asoc','Tipo', 'Descripcion', 'Monto']:
---------------------------------------------------------------------------------------------------------
Estos son los nombres de los campos de la base de datos o del arreglo que estés trabajando.
colModel: [
{ name: 'Id_Registro', index: 'Id_Registro', width: 100, align: 'left',editable: true},
{ name: 'Codigo_Cuenta', index: 'Codigo_Cuenta', width: 100, align: 'left',editable: true},
{ name: 'Centro_Costo', index: 'Centro_Costo', width: 100, align: 'left',editable: true },
{ name: 'Doc_Asoc', index: 'Doc_Asoc', width: 100, align: 'left',editable: true },
{ name: 'Tipo', index: 'Tipo', width: 100, align: 'left',editable: true},
{ name: 'Descripcion', index: 'Descripcion', width: 200, align: 'left',editable: true},
{ name: 'Monto', index: 'Monto', width: 200, align: 'left',editable: true},
]:
----------------------------------------------------------------------------------------
Es un arreglo que describe las opciones de cada columna, algunas opciones son las siguientes
name: Nombre de la columna
index: Es el nombre que se envía al servidor cuando se ordenan los datos
width: Indica el ancho de la columna
editurl: "inlineEdit.php":
-------------------------------
Contiene el código que grabara los datos en la tabla de la base de datos (Pondré el código más adelante también).
resizable: Indica si el ancho de la columna se puede redimensionar, los posible valores son true o false
align: Alineación del texto, los posible valores son: left, center, right
pager: Indica que elemento HTML que sera la barra de paginacion, se utiliza su atributo id
rowNum: Indica cuantas filas se mostraran por pagina
sortname: Indica el campo por el cual se ordenaran los datos
sortorder: Indica si se ordenaran de forma ascendente “asc” o descendente “desc”
viewrecords: Indica se se mostrara el numero de registros que tiene la tabla, puede ser true o false
captio: Indica el titulo del grid
************************** CODIGO DEL ARCHIVO CARGA DATOS******
Importante: yo uso la librería adodb para conectarme al postgresql y trabajarlo puedes documentarte en esta dirección:
http://www.lacorona.com.mx/fortiz/adodb/docs-adodb-es.htm#ex11
<?php
require('funciones/Conectar.php');
$page = $_GET['page']; // get the requested page
$limit = $_GET['rows']; // get how many rows we want to have into the grid
$sidx = $_GET['sidx']; // get index row - i.e. user click to sort
$sord = $_GET['sord']; // get the direction
if(!$sidx) $sidx =1; // connect to the database
$SQL_Funciones ='SELECT
"Asientos"."Id_Registro","Asientos"."Numero_Comprobante",
"Asientos"."Codigo_Cuenta", "Asientos"."Numero_Documento",
"Asientos"."Descripcion_Asiento", "Asientos"."Monto_Asiento" FROM
"Asientos" INNER JOIN "Comprobante" ON
("Comprobante"."Numero_Comprobante" = "Asientos"."Numero_Comprobante")
INNER JOIN "Centros_Costo" ON ("Centros_Costo"."Codigo_Centro" =
"Asientos"."Codigo_Centro_Costo") INNER JOIN "Plan_Cuentas" ON
("Plan_Cuentas"."Codigo_Cuenta" = "Asientos"."Codigo_Cuenta") where
"Asientos"."Numero_Comprobante"'."='"."b1040068"."'";
$Data_Funciones_N = $conn->Execute("$SQL_Funciones");
$count=$Data_Funciones_N->RecordCount();
if( $count >0 ) { $total_pages = ceil($count/$limit); } else { $total_pages = 0; }
if ($page > $total_pages) $page=$total_pages; $start = $limit*$page - $limit; // do not put $limit*($page - 1)
$responce->page = $page;
$responce->total = $total_pages;
$responce->records = $count;
$i=0;
while (!$Data_Funciones_N->EOF)
{
//$responce->rows[$i]['Codigo_Cuenta']=$Data_Funciones_N->fields[1];
$responce->rows[$i]['cell']=array($Data_Funciones_N->fields[0],$Data_Funciones_N->fields[1],$Data_Funciones_N->fields[2],$Data_Funciones_N->fields[3],$Data_Funciones_N->fields[4],$Data_Funciones_N->fields[5]);
$i++;
$Data_Funciones_N->MoveNext();
}
echo json_encode($responce);
?>
Explicación:
---------------
Este
código simplemente se conecta a la base de datos lee los registros
mediante un ciclo y devuelve los registros solicitados puedes cambiarlo
por tu propio método de conexión y recorrida de registros.
*************CODIGO DEL ARCHIVO inlineEdit.php************
<?php
extract($_POST);
extract($_GET);
require('funciones/Conectar.php');
if (($_POST['oper']) == "add") {// agregar registros
$Sql_Inyecta="INSERT INTO ".'"Prueba"("campo") VALUES ';
$Sql_Valores="('".$_POST['Centro_Costo']."')";
$Sql_Inyecta=($Sql_Inyecta.$Sql_Valores);
if ($conn->Execute($Sql_Inyecta)== false) {print 'Error Insertando Registros';}
}
if (($_POST['oper']) == "del") {// eliminar registros
// query para borrar
}
if (($_POST['oper']) == "edit") {// editar registros
// query para editar
}
?>
Explicación:
---------------------
Al
hacer clic en los botones Editar, Agregar o Eliminar mediante el
método post son pasados a este archivo (inlineEdit.php) cada uno de los
campos descritos en el colNames:
['Id_Registro','Codigo_Cuenta','Centro_Costo', 'Doc_Asoc','Tipo', 'Descripcion', 'Monto'],
Junto
a un parámetro llamado oper el cual identifica el tipo de operación
ejecutada si deseas ver internamente como trabaja este proceso instala
el complemento de Firefox firebug selecciona la opción red, dentro de
la opción red selecciona todo y luego selecciona la pestaña post y veras
como son enviados los valores al archivo inlineEdit.php
Documentación de Firebug:
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=firebugAvanzado
******FIN DEL EJEMPLO****
Bien
hasta aquí este sencillo ejemplo espero les sea de utilidad y les dejo
los links de otras páginas Jqgrid, un Abrazo a todos desde Caracas
Venezuela, escribió para ustedes Lic. David Rafael Blanco Leon.
MIS OTROS APORTES ESTAN EN ESTA DIRECCION:
https://plus.google.com/u/0/116785059505984459570/posts
PAGINAS RECOMENDADAS:
http://www.forosdelweb.com/f127/jqgrid-guardar-cambios-base-datos-866639/
http://www.trirand.com/blog/jqgrid/jqgrid.html
https://groups.google.com/forum/?fromgroups=#!topic/jquery-es/N2jjavw5NO0
http://www.codedrinks.com/2011/12/04/ejemplo-jqgrid-mostrar-datos-de-una-base-de-datos-mysql/