[SOLUCIONADO] Cuadros con multiple selección

Hola, existe la posibilidad de “seleccionar” todos o ninguno de los registros mostrados en el cuadro? ya sea que el mismo esté paginado, o contenga cortes de control?
Para el caso particular, es un cuadro plano que permite multiples selecciones, sin paginar y sin cortes de control.
Mil gracias

PD: estoy trabajando con la versión 1.5.x

Sumo otra pregunta al mismo tema:

La idea es seleccionar un grupo de registros de un cuadro y pasar dichos datos a una nueva pantalla donde los ids seleccionados serán utilizados para una carga masiva de datos.

Básicamente el código sería el siguiente:
El evento seleccion del cuadro es un evento a nivel de fila, marcado como múltiple.
El evento modificar es a nivel del ci que maneja las 2 pantalla (seleccion, edicion).

<?php...
	function evt__cuadro__seleccion($datos)
	{
		$this->s__ids_seleccionadas = $datos;
		toba::logger()->var_dump($this->s__ids_seleccionadas);
	}

	function evt__modificar()
	{
		$this->set_pantalla('edicion');
	}

Ahora bien, en el evento modificar… como puedo capturar los ids seleccionados para cargarlos en la variable de sesion?
No termino de entender bien el funcionamiento… el evento cuadro_seleccion, se ejecuta si el evento modificar no tiene código, es decir, fuerza la recarga de la pantalla actual… si esto es así (el evento modificar no posee código propio), funciona sin problemas, dejando en el log los valores seleccionados (aunque claro, borra los ids seleccionados).

Hola Martin,

lo que no esta actualmente son los links que disparen los eventos para seleccionar todos/ninguno. Lo que deberias hacer es extender el metodo html_cuadro_cabecera_columnas de la clase ei_cuadro y ahi sacar un par de links para disparar un javascript que seleccione o deseleccione todos los checks del cuadro.

Lo que vas a necesitar tambien es un evento en la misma pantalla que dispare el envio de datos al servidor. Ese evento en si mismo no va a tener datos, esta simplemente para disparar el procesamiento de los otros eventos en la pantalla.

Del lado del server vos deberias recibir en el evento evt__cuadro__seleccion un recordset con las filas que fueron seleccionadas. En el proyecto toba_referencia, existe una operacion dentro de ‘Componentes->Cuadros->Seleccion y Orden. Multiple’ que usa este metodo, lo que te estaria faltando ahi seria los 2 metodos js para ir pasando por los checkbox.

Con respecto a lo que me decis del evento de modificacion, por lo que veo el mismo esta a nivel de CI, no deberia estar influyendote en la recuperacion de los datos de la seleccion del cuadro.
Hagamos una cosa, la llamada a toba::logger, reemplazala por un ei_cuadro($datos), de esa forma vas a poder ver por pantalla si pasa por el metodo o no.
Si no pasa, te voy a pedir que me subas el codigo del CI ya que debe haber algo mas interfiriendo con el disparo del evento.

Saludos

Lo que deberias hacer es extender el metodo [b]html_cuadro_cabecera_columnas[/b] de la clase ei_cuadro y ahi sacar un par de links para disparar un javascript que seleccione o deseleccione todos los checks del cuadro.
¿Como?
Lo que vas a necesitar tambien es un evento en la misma pantalla que dispare el envio de datos al servidor. Ese evento en si mismo no va a tener datos, esta simplemente para disparar el procesamiento de los otros eventos en la pantalla.

Del lado del server vos deberias recibir en el evento evt__cuadro__seleccion un recordset con las filas que fueron seleccionadas. En el proyecto toba_referencia, existe una operacion dentro de ‘Componentes->Cuadros->Seleccion y Orden. Multiple’ que usa este metodo


Si, lo vi… me parecio un comportamiento extraño, pero funciona (algún día lo entenderé!!!). Esta tarea, la está haciendo el evt__modificar del CI.

, lo que te estaria faltando ahi seria los 2 metodos js para ir pasando por los checkbox.
Estos son los 2 de arriba, no?
Con respecto a lo que me decis del evento de modificacion, por lo que veo el mismo esta a nivel de CI, no deberia estar influyendote en la recuperacion de los datos de la seleccion del cuadro. Hagamos una cosa, la llamada a toba::logger, reemplazala por un ei_cuadro($datos), de esa forma vas a poder ver por pantalla si pasa por el metodo o no. Si no pasa, te voy a pedir que me subas el codigo del CI ya que debe haber algo mas interfiriendo con el disparo del evento.
Pasó, incluí el ei_arbol para ver si pasaba por el método, lo hacía, y luego (algo habré corregido), cambia de pantalla sin problemas y la variable de sesión tiene asignadas las ids seleccionadas.

Solo me quedaría pendiente lo de la selección de todos/ninguno con un check en la columna, que te pido algún ejemplo si tuvieras, ya que no cuento con el conocimiento para estas cosillas aún.

Igual, me parece que estaría piola para la próxima versión, que se incluya esta funcionalidad…

Hola Martin,

en respuesta a tu pedido de ejemplo aca te dejo un par de funciones que hizo Clara Cassalini para una nueva version del SIU-Kolla (que aun esta en desarrollo) que esta aprovechando este tema del multiseleccion. Creo que lo unico que te quedaria seria extender el cuadro para sacar un par de div’s con un onclick que llame a estos metodos.


{$this->objeto_js}.evt__seleccion_total = function ()
          { 
              var check;
              for (i in this._filas) {
                  check = $(this._input_submit + i + '_' + 'seleccion');
                  if (!check.checked) {
                      this.seleccionar(i, 'seleccion');
                  }
              }
              return true;
          }
   
          {$this->objeto_js}.evt__deseleccion_total = function ()
          { 
              var check;
              for (i in this._filas) {
                  check = $(this._input_submit + i + '_' + 'seleccion');
                  if (check.checked) {
                      this.seleccionar(i, 'seleccion');
                  }
              }
              return true;
          }  

Saludos