Asignar valor a Data Catcher edit

Buenos días

Tengo un formulario sin origen en el que tengo un control Data catcher edit para seleccionar un valor de una lista de formatos. El data catcher me muestra bien el contenido de la tabla y puedo seleccionar el formato que quiero, pero lo que no consigo es que me aparezca un elemento seleccionado por defecto al abrir el formulario.

¿Sabe alguien la manera de asignar un contenido inicial al data catcher? Es decir, que me aparezca seleccionado uno de los elementos de la lista.

Gracias y un saludo

Gonzalo Torre

@gontorre

Existe una incidencia en vBugman al respecto,la número 003974.

Esta incidencia nos impide ponerle un valor inicial al Datacatcher edit.

Gracias Antonio

Al final he sustituido el data catcher por una vista de datos alimentada por proceso y que muestra un combo. Ahí si que puedo seleccionar uno de los elementos.

Un saludo

Gonzalo Torre

Hola.

Mientras arreglan el bug (que hubiera justificado, junto con otros bugs, una release 7.16.01) podemos usar la función setRegister() de la clase VDataCatcherEdit del API.

Os pongo un ejemplo que uso para los formularios maestro-detalle en los que quiero seleccionar el maestro de forma dinámica.

  • El formulario maestro-detalle tiene como origen la tabla TAB_MAESTROS.
  • El control DataCatcherEdit CBO_MAESTROS tiene como contenido la variable local NID_MAESTRO y como Lista apuntada la tabla TAB_MAESTROS o cualquier otra mediante la cual podamos obtener el valor del maestro, esta es la gran ventaja de usar el DataCatcherEdit.
  • Creamos una conexión de evento EVT_CAMBIO_MAESTRO que se dispara con CBO_MAESTROS.(Value Changed) y ejecuta el manejador CAMBIO_MAESTRO.
  • En el evento Post-inicializado del formulario fijamos el valor inicial de NID_MAESTRO (que será el valor #ID de la ficha u otro que obtengamos de la tabla TAB_MAESTROS en el caso de que #ID sea 0) y llamamos al manejador CAMBIO_MAESTRO.

El manejador CAMBIO_MAESTRO contiene lo siguiente:
Rem (Cambiar el registro Maestro del formulario mediante el API)
Interfaz: Ejecutar manejador de evento(CAMBIO_MAESTRO_JS)
Rem (Mostrar en la Rejilla los plurales del Mestro seleccionado)

El código JS del manejador CAMBIO_MAESTRO_JS será el siguiente:


var oForm = theRoot.dataView()
// Construimos un objeto Lista de Maestros
var oListaMaestros = new VRegisterList(theRoot)
oListaMaestros.setTable("Alias/TAB_MAESTROS")
// Obtenemos el ID del Maestro
var nIDMaestro = theRoot.varToInt("NID_MAESTRO")

if (nIDMaestro > 0 && oListaMaestros.load("ID",[nIDMaestro])) {
        // Obtenemos la Ficha del Maestro seleccionado
   	var oMaestro = oListaMaestros.readAt(0)
        // Cambiamos el Registro asociado al Formulario
	oForm.setRegister(oMaestro)
        // Cambiamos el valor mostrado en el DataCatcherEdit
	var oCboMaestros = oForm.control("CBO_MAESTROS")
	oCboMaestros.setRegister(oMaestro)
}

Como vemos, la línea oCboMaestros.setRegister(oMaestro) fijará el maestro que queremos mostrar en el DataCatcherEdit.
El formulario cambia dinámicamente de maestro mediante la línea oForm.setRegister(oMaestro).

Saludos
Paco Satué

"!!! Casi seis años y sigue igual, he escrto este pedazo de código y aunque he comprobado que los valores son correctos, alm,imp,reg. en el formulario sigue en blanco el dataCatcherEdit, alguna ayuda?

//se obtiene el control DataCatcherEdit, y el valor de la clave a buscar
var ctr = theRoot.dataView().control(“IMP”);
var imp = theRegisterIn.fieldToInt(“IMP_M”);
var alm = theRegisterIn.fieldToInt(“ALM_M”);

// Se crea un registro de la tabla del DataCatcherEdit, y se carga por id
var reg = new VRegister(theRoot);
reg.setTable(“appcloud_plus_dat/IMP_ALM”);
reg.readRegister(“IMP_ALM”, [imp, alm], VRegister.SearchThis);

// Se asigna el registro al control
ctr.setRegister(reg);

image