Quisiera saber como construyo un datawindows tipo external grid en tiempo de ejecución, es decir de inicialmente no se el numero de columnas que tendrá, ya que es variable. Otra pregunta: como hago para que en un datawindows tipo grid no permita la edición de las celdas, no se si esto debe hacerse en el control datawindows o en el objeto datawindows. Si alguien pudiera ayudarme estaré myu agradecido.
1 Respuesta
Respuesta de Antonio Garcia
1
1
Antonio Garcia, clipper todas sus versiones (manejo total) power builder todas...
La construcción de un datawindow dinámico actualmente, y hasta donde yo tengo conocimiento utilizando la version 8.01, solo puede generarse en base a un select, el cual internamente genera una cantidad de columnas, igual a el numero de campos seleccionados en dicho script, estos campos o columnas, son confexionadas en base a su tipo, tamaño, validaciones, mascaras, etc. las cuales fueron declaradas en la tabla correspondiente al momento del diseño. Sin embargo se me ocurre que puedes utilizar una alternativa con un datawindow tipo grid, y como tu dices, basado en un external datawindow. (Actualmente yo así lo resolví) Me vi en la necesidad de generar un numero indefinido y desconocido de campos los cuales me sirvieron para generar una serie de mascaras. La solución se dio utilizando un external datawindow tipo grid, con varias Diseño: 1 - Columna para contener un Titulo 1 - Columna para contener el valor 1 - Columna para determinar su ingreso o visualización 1 - Columna para determinar su tipo 1 - Columna para determinar su requerimiento u obligatoriedad * - todas tipo alfanumerico o char Explicando: Las columnas titulo y valor son evidentes, por lo que paso a explicar las siguientes: DETERMINAR INGRESO: esta columna contiene un ES o N y depende de este valor si es solo visual o permite el ingreso, en la propiedad PROTECT, por medio de un IF si es ES entonces DESPROTEGE de lo contrario PROTEGE DETERMINAR TIPO: esta columna es informativa para el proceso, simplemente contiene el tipo de columna que debería ser, ya sabes, char, numérico, date, datetime, etc. DETERMINA OBLIGATORIEDAD: esta igual que la que protege, contiene un ES o N, significa que en el evento itemchanged es valorado e interrogado ya sabes, si contiene este campo una ES y el valor es nulo o envío un mensaje de error, y no dejo pasar al siguiente. Notas: Por supuesto que todas las columnas menos TITULO e INGRESO son visuales o están presentes en la pantalla, las otras solo son utilizadas como datos de referencia. Es posible que para tus necesidades estas columnas no sean suficientes, y tengas que añadir alguna otra, pero esto ya sera (en caso de utilizar esta opción) algo que tu propiamente integres, añadas, modifiques. Etc. Con respecto a tu segunda pregunta, es relativamente fácil siempre y cuando se trate de un datawindow external, a la cual simplemente le añades una columna por ejemplo EDIT (yo personalmente la utilizo de tipo numérico), por supuesto que esta no forma parte de la ventana, y a cada columna que desees encender o apagar, en la propiedad protect colocas una condición IF((edit = 1), 0, 1) Esto significa que si la columna edit contiene un valor mayor a uno desprotege de lo contrario no, puede existir una variante a la columna edit puedes asignar varios valores y por ende la condición a otras columnas, de esta forma, puedes considerar niveles de columnas unas que se encienden con un valor y otras con otro Por ejemplo algunas columnas que con valor 1 son encendidas otras con valor 2, otras con 3 y así..., o algunas otras que se encienden con un valor distinto a 0.