Hacer que el grid mantenga los datos escritos luego del submit
De CidesaWiki
NOTA: A partir de la revisión 3752 ya no hay que hacer nada para que el grid mantenga los datos de la vista
Para hacer que el grid mantenag los datos luego del submit se debe configurar el validateEdit de la siguiente forma
public function validateEdit() { $resp=-1; if($this->getRequest()->getMethod() == sfRequest::POST){ $this->caajuoc = $this->getCaajuocOrCreate(); $this->updateCaajuocFromRequest(); $this->configGrid(); // [1] $grid = Herramientas::CargarDatosGrid($this,$this->obj); // [2] $this->configGrid($grid[0],$grid[1]); // [3] // Aqui van los llamados a los métodos de las clases del // negocio para validar los datos. // Los resultados de cada llamado deben ser analizados por ejemplo: $resp = Compras::validarAlmajuoc($this->caajuoc,$grid); // al final $resp es analizada en base al código que retorna // Todas las funciones de validación y procesos del negocio // deben retornar códigos >= -1. Estos código serám buscados en // el archivo errors.yml en la función handleErrorEdit() if($resp!=-1){ $this->coderror = $resp; return false; } else return true; }else return true; }
- [1]. En esta linea se carga el objetos $this->obj al llamar a la función "configGrid", el cual contiene la configuración del grid.
- [2]. Se llama a la función "CargarDatosGrid", para obtener los objetos modificados y los eliminados.
- [3]. Se vuelve a llamar al "configGrid" para reescribir las opciones del grid ($this->obj), con la información de la vista que fue obtenida con la función "CargarDatosGrid".
Luego de esto ya el objeto $this->obj contiene los registros que realmente van a ser mostrado. Cabe desatacar que los registros nuevos se mostrarán y los eliminados no, esto ya actualmente esta validado.
Por otro lado la función "configGrid" sufre una modificación que debe ser incluida:
public function configGrid($reg = array(),$regelim = array()){ // [1] $this->regelim = $regelim; // [2] if(!count($reg)>0){ // [3] $c = new Criteria(); $c->add(CaartaocPeer::AJUOC ,$this->caajuoc->getAjuoc()); // TODO: Ampliar el Where para colocar la siguiente restricción que tiene el // Código de VB: // CDbl(ObtenerValorNumericoReal(CAArtOrd!CanOrd) - ObtenerValorNumericoReal(CAArtOrd!CanAju)) <> CDbl(ObtenerValorNumericoReal(CAArtOrd!CanRec)) $reg = CaartaocPeer::doSelect($c); } $this->obj = Herramientas::getConfigGrid(sfConfig::get('sf_app_module_dir').'/almajuoc/'.sfConfig::get('sf_app_module_config_dir_name').'/grid_caartaoc',$reg); }
- [1]. Se deben pasar como parámetros opcionales los registros a actualizar y un arreglo de los registros marcados como eliminados. Estos datos vienen de la función "CargarDatosGrid".
- [2]. la variable $this->regelim es pasada como un parámetro opcional al gridhelper. Esta variable contiene los registros marcados a ser eliminados. El gridhelper ya esta configurado para marcarlos de neuvo en la vista y no mostrarlos.
- [3]. con este "if" se verifica que si la variable $reg fue pasada como parámetro a la función, no debo cargar los datos de la base de datos, ya que no mostraría los registros nuevos que pueda traer de la vista.
Por último debes llamar al gridhelper de la siguiente forma:
echo grid_tag($obj,$regelim);