Seleccionar ficha por posición


([N1] OscarBarea) #1

Hola,
Quisiera saber la posición que tiene un registro en la rejilla, pero no consigo dar con ello. Solo veo “Seleccionar ficha por posición”, pero no se como recuperar la posición de un registro seleccionado en una rejilla.
Se puede hacer ?
Gracias
Oscar B.


([N1] wikan) #2

O lo haces con lenguaje nativo recorriendo la lista buscando el id o usas vJavascript con la función currentSelect()

La documentación aquí, http://velneo.es/info_v7_718_es/velneo_vdevelop_v7/scripts/clases/core/widget/vabstractdataview/vabstractlistdataview/#currentSelect


([N1] OscarBarea) #3

Hola Wikan,
Con el ID no tengo ningún problema.
Lo que quiero es que el usuario una vez seleccione un registro de la lista de un formulario, la próxima vez que la vuelva a abrir este formulario le seleccione el registro que seleccionó la última vez.
Esta lista de registros no es muy grande y por eso lo quiero hacer por posición y no por el ID.
Como se puede guardar la posición de la lista seleccionada?
Gracias


([N1] wikan) #4

Repito la respuesta explicándome mejor.

Puedes hacer con lenguaje nativo:
Con un manejador de evento cuando cambie el elemento seleccionado en la rejilla, guardas el ID del registro seleccionado.
La próxima vez que abras el formulario, tendrás que recorrer la lista buscando la posición del registro que coincida con el ID guardado y usar la sentencia, “Seleccionar por posición”

Puedes hacerlo con javascript haciendo más o menos lo mismo.

  • Cuando cambie el seleccionado en un evento con javascript
var rejilla = theRoot.dataView();
var lista = rejilla.getList();
var registro = lista.read(rejilla.currentSelect);

theRoot.setGlobalVar("VARIABLE_QUE_GUARDA_EL_ID", registro.fieldToInt("ID"));

Para volver a seleccionarlo, en el post inicializado del formulario;

var lista = new VRegisterList(theRoot);
lista.setTable("ID_REF_DE_LA_TABLA");

// Obtiene el registro del último ID seleccionado
var registro = lista.readRegister("ID", [theApp.globalVarToInt("ID")], VRegister.SearchThis);

// Obtiene la rejilla
var rejilla = theRoot.dataView().control("IDENTIFICADOR_DE_LA_REJILLA");
rejilla.setCurrentSelect(registro);

Puede contener errores el javascript ya que está escribo bastante de memoria.

Si trabajas con posiciones el día que el número de registros cambie ya no te funcionará.


([N1] OscarBarea) #5

Mucha gracias,pero lo que no quisiera hacer es recorrer toda la lista.
Hay una instrucción “Seleccionar ficha por posición” que me va fenomenal, pero la que no tengo es la de leer la posición del registro seleccionado de una lista.
Muchas gracias


([N1] wikan) #6

No existe lo que tu quieres, te he dado dos posibles maneras de solucionarlo. Quizás alguien más pueda aportar otra solución.

Si no quieres recorrer toda la lista tendrás que usar javascript para obtener directamente la posición con currentSelect


([N1] OscarBarea) #7

Muchas gracias Wikan, te lo agradezco


([N3] pacosatu) #8

Hola Oscar.

Supongo que guardar la posición de una Rejilla tendrá sentido en tu Aplicación porque siempre es más seguro guardar el ID.
La posición que guardes apuntará a un registro diferente en cuanto se inserten nuevos registros o se cambie el Orden de la Lista.

De todas formas sí que se puede guardar la Posición.
En el evento ON_HIDE del formulario haces lo siguiente:
– Interfaz procesar (“ID_REJILLA”, Todas)
---- Modificar variable global("$ID_GLOBAL_POSICION", sysListPos, LOK)
En el evento POS_INI del formulario
– Interfaz procesar (“ID_REJILLA”, Todas)
---- Seleccionar ficha por posicion("$ID_GLOBAL_POSICION")

sysListPos es una variable del sistema que nos da la posición de la Lista.
No tiene mucha utilidad pero en este caso nos sirve.

Recordar también que existen las funciones del API para la serialización de Lista de Registros, es decir, podemos guardar y recuperar las posiciones de uno a varios registros en un fichero de disco.

Saludos
Paco Satué