Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   CxGrid con CheckBox (https://www.clubdelphi.com/foros/showthread.php?t=62898)

Vlady 20-01-2009 16:22:27

CxGrid con CheckBox
 
Hola amigo del club delphi mi pregunta es la siguiente tengo una cxGrid de QuantumGrid con un lista de facturas por cancelar a determinado cliente, lo que dese es adicionar una columna llamada cancelar con una casilla checbox para que el usuario seleccione q facturas desea cancelar. Pero este campo no existe en la base de datos y deseo q solo exista en memoria este valor para desplegar el form de cancelacion de facturas, el problema es q no se como puedo trabajar con un campo en memoria al tener una consulta, es decri crear un campo de tipo Char y mediante la grilla de la consulta modificar este valor y luego verificar estos valores modificados.

Utilizo firebird 2.0, delphi 7 y los componentes QuantumGrid de DVExpress.

Gracias

ContraVeneno 20-01-2009 16:31:47

Puedes utilizar el componente TdxMemData que viene en las Quantum. Yo todavía no lo he usado, pero según la ayuda, te crea una tabla en memoria.

Vlady 20-01-2009 16:37:19

Gracias contraveneno por tu ayuda, no encuentro este componente q dices, lo q deseo es solo crear un campo en memoria no chequeado y q luego el usuario seleccione los registros que quiere chequeandolos y q esta informacion me quede en memoria para saber cuales chequeo.

RolphyReyes 20-01-2009 16:39:44

Otra alternativa sería:

Código SQL [-]
  SELECT CAMPO1, CAMPO2, 'N' AS CANCELAR FROM TABLA1

Con esta solución tendrías que trabajar en cache y luego bajarlo al servidor.

Vlady 20-01-2009 16:59:20

Como se trabaja en cache no me permite chequear.

ContraVeneno 20-01-2009 17:01:42

Cita:

Empezado por Vlady (Mensaje 335139)
Gracias contraveneno por tu ayuda, no encuentro este componente q dices, lo q deseo es solo crear un campo en memoria no chequeado y q luego el usuario seleccione los registros que quiere chequeandolos y q esta informacion me quede en memoria para saber cuales chequeo.

Yo lo veo en la paleta de DevExpress, dos lugares abajo del cxGrid (Quantum versión 6.41).

Y la idea es hacer tu consulta (Query) y ligarla a este componente, en el cuál le puedes definir todo lo que necesites y luego controlarlo desde ahí como si fuera un Dataset normal. El usuario con esta tabla en memoria puede hacerlo todos los cambios que quiera y al final validas cuales están seleccionados...

también podrías emplear una tabla temporal y un TClientDataset, pero creo que es mas rollo.

Vlady 20-01-2009 17:39:43

Tengo la version 5.11 de los cuantum Grid

Caro 20-01-2009 17:58:26

Hola Vlady, puedes utilizar un ClientDataSet para crearte ese campo en memoria, debes relacionar tu DataSet->DataSetprovider->ClientDataSet y al ClientDataSet es al que le aumentas ese campo en memoria, los datos de ese campo no se almacenan en tu BD ya que el campo no existe, pero puedes trabajarlo en memoria como si fuera otro campo, cuando hagas el AppyUpdates ese campo no se graba ni lo toma en cuenta.

Saluditos

AzidRain 20-01-2009 21:53:28

Te estas complicando demasiado, el componente QuantumGrid tiene una opción muy sencilla para seleccionar varias filas (registros) y luego saber que filas se seleccionaron. Todo ello sin meterse en broncas de checkboxes y demás. Revisa la documentación que traen, ahi viene un ejemplo precisamente de eso, otra opción es el foro de consultas de los devex, te mandarán seguramente un ejemplito de acuerdo con tu caso.

Vlady 21-01-2009 00:17:37

Pero cual es el ejemplito?

AzidRain 21-01-2009 01:08:59

mmmmm...si tienes una version registrada seguramente la tienes y seguramente tabien tienes acceso al foro de dudas de DevExp...por lo que veo tienes una copia...que no pagaste...ni modo.

Acoto: luego me dicen el caza-piratas. Si adquiriste el componente, tienes derecho a soporte directo de parte de la gente DevExp, el cual incluye acceso al foro donde les puedes poner CUALQUIER duda respecto a como utilizar tal o cual función, o cmo hacer tal o cual cosa. Normalmente te ponene una solución acompañada de un ejemplo de como usarlo y en casos de que no esté implementado toman nota y lo utilizan par la siguiente versión...todo ello obviamente si eres usuario registrado.

Hasta ahora es nuestra mejor inversión.

juanelo 21-01-2009 01:33:39

Que tal,
La propuesta que hace caro con el CDS es para mi la mas sencilla, que de hecho yo la tengo implementada en un buen numero de ocasiones. Como dice, puedes crear un campo de tipo "internal data", en CDS y a este asignarle la columna del check. Y si utiliza ApplyUpdates para grabar, este simple y sencillamente es ignorado.
Saludos.

Al González 21-01-2009 09:51:53

Cita:

Empezado por juanelo (Mensaje 335267)
Que tal,
La propuesta que hace caro con el CDS es para mi la mas sencilla, que de hecho yo la tengo implementada en un buen numero de ocasiones. Como dice, puedes crear un campo de tipo "internal data", en CDS y a este asignarle la columna del check. Y si utiliza ApplyUpdates para grabar, este simple y sencillamente es ignorado.
Saludos.

Así es, yo también optaría por la solución de Linett. Es otra de las muchas ventajas de usar ClientDataSets, el hecho de poder añadirle campos de memoria adicionales al conjunto de datos.

Se conocen como InternalCalc.

Saludos.

Al. :)

ContraVeneno 21-01-2009 15:57:04

pues a mi me parece más sencillo utilizar las funciones del mismo cxGrid y simplemente seleccionar las que se quieren cancelar; es decir, no hay necesidad de campos extra, ni de tablas en memoria, ni de checkboxes.

AzidRain 21-01-2009 17:41:02

Es lo que yo decia contraveneno, ¿verdad que es mas sencillo?

Al González 21-01-2009 18:10:44

¡Hola!

Entiendo que algunas cosas serían más sencillas bajo otro enfoque de interfaz de usuario. De hecho es probable que yo también usaría la selección múltiple en un caso como ese.

Pero si el usar cuadros de verificación (check boxes) es un requerimiento de diseño de Vlady, creo que un campo extra de memoria no sería mala idea para cumplir con ese requerimiento. :)

Así lo llegué a usar en un caso donde se requería selección rápida y clara por parte de un cajero. Este caso es para marcar de una lista de deudas las que el deudor puede o quiere pagar (con sus respectivas validaciones de correlación y cronología):



Saludos.

Al González. :)

juanelo 21-01-2009 18:20:21

Extendiendo el comentario de Al, yo creo que al usuario comun y corriente le es mas intuitivo ver una columna que le indique que hay que checar para que se selecciono y no la multiple seleccion donde ademas interviene la combinacion de teclas simultaneas (shitf, ctrol, flecha arriba o abajo).
Quiza sea un "poco" mas tardado, pero creo que el resultado vale la pena.
Saludos

Caro 21-01-2009 18:23:22

Cita:

Empezado por ContraVeneno (Mensaje 335350)
pues a mi me parece más sencillo utilizar las funciones del mismo cxGrid y simplemente seleccionar las que se quieren cancelar; es decir, no hay necesidad de campos extra, ni de tablas en memoria, ni de checkboxes.

Cita:

Empezado por AzidRain (Mensaje 335386)
Es lo que yo decia contraveneno, ¿verdad que es mas sencillo?

Estoy de acuerdo, puede ser mas sencillo, pero también la solución que di es sencilla, no es complicada. Como es mas sencillo utilizar el cxGrid porque no indican algo de la solución, que propiedades se debe tocar :confused:, un poco de codigo para saber por donde ir....., si bien algunos no tenemos los DevExpress (ni pirata), pero el hecho de encontrar comentarios y soluciones sobre algunas cosas que nos toman mas tiempo con componentes standares, nos ayudaría a saber si comprar o no dichos componentes. Lo unico que se me viene a la cabeza para seleccionar varios registros es que sea MultiSelect ¿pero no creo que se esten refiendo a eso verdad?.

Saluditos

Caro 21-01-2009 18:34:59

Cita:

Empezado por Al González (Mensaje 335293)
Se conocen como InternalCalc.

Estaba casi segura que en mi comentario había puesto que el campo debe ser InternalCalc, creo que en estos días ando volando.

Saluditos

AzidRain 21-01-2009 22:08:14

Pues el multiselect viene incluido en el grid que trae por defecto Delphi, si no les gusta usar dos teclas para seleccionar simplemente se cambia la tecla a enter o algo asi y listo. El detalle de meter checkboxes es que el usuario solo podra darse cuenta que ha seleccionado un registro por la marquita, en cambio con multiselect se marca toda la fila, con lo que me parece es más que obvio que está seleccionado. Por otro lado, el usar el multiselect es el estandar que usa windows para todo.

Otra forma es habilitar el multiselect y marcar cada registro con un doble click.

Una cosa que podrias hacer si es posible es consultar con los usuarios que tendrá tu sistema y comentarles las opciones que hay para obtener su punto de vista y asi trabajar sobre la opción que se les haga mas fácil de usar. Esta práctica es muy útil y te ayudará a trabajar en lo que efectivamente van a buscar tus usuarios.


La franja horaria es GMT +2. Ahora son las 19:49:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi