Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   SMDBGrid recorrerla y sumar los chequed=true (https://www.clubdelphi.com/foros/showthread.php?t=90910)

marilinspi 06-10-2016 16:44:51

SMDBGrid recorrerla y sumar los chequed=true
 
hola, tengo un SMDBGrid con una columna en la que puedo Chequear True o false, quiero que a medida que voy Chequeando recorra la grilla y sume los monto de los registros que Chequed=True.... probé en varios eventos de la grilla, pero con ninguno lo logro,
Código Delphi [-]
  Monto:=0;
    RxmComprobantes.First;
    while not RxmComprobantes.Eof do
    begin
      if RxmComprobantesGenerar.Value=True then
        Monto:=Monto+RxmComprobantesNeto.AsCurrency;
      RxmComprobantes.Next;
    end;

si alguien sabe como hacerlo...desde ya muchas gracias.

ecfisa 07-10-2016 04:30:47

Hola marilinspi.

¿ Con que base de datos y mediante que componentes, obtenes los datos mostrados en el SMDBGrid ?

Saludos :)

marilinspi 07-10-2016 13:09:22

hola, la base de datos es Firebird y obtengo los datos mediante un SqlDataSet, DataSetProvider y CLienteDataSet
Gracias

ecfisa 07-10-2016 22:49:02

Hola.

Como te conectas mediante un TClientDataSet y tomando en cuenta que generalmente por convención en Firebird se se usan los valores 0 y 1 (SMALLINT) como falso y verdradero respectivamente, se me ocurre que podrías lograr lo que buscas mediante un campo agregado (siempre que así tengas definida la columna).

Supongamos que los campos a tomar en cuenta se llaman SUBTOTAL y BOOLEAN, siendo SUBTOTAL el valor a sumar y BOOLEAN que puede tomar los valores 0 y 1 (false/true).

Una opción sería fijar en el TAggregateField la cadena de la propiedad Expresion en : "SUM(SUBTOTAL * BOOLEAN)" eso hará que sólo se sumen los valores de las filas cuya columna BOOLEAN sea igual a 1. Y luego ya podes mostrarlo mediante un TDBEdit por ejemplo.

Para generar un campo calculado en diseño o ejecución revisa este artículo: ClientDataSet Aggregates and GroupState

Te muestro con un ejemplo a que me refiero:



(Usé un TDBGrid y andaba algo haragán así que te debo el detalle del checkbox )

Saludos :)

marilinspi 17-10-2016 15:07:41

hola, gracias por tu respuesta.... intentado hacer lo que me sugerís me surge que no puedo porque si bien yo me conecto a la base de datos como te comente, los campos que quiero sumar los tengo cargados en un RXMemoryData y este no tiene la opción Aggregate... no hay un evento en el smdbgrid que al tildar o destildar la recorra y haga la sumatoria de los tildados...

ecfisa 17-10-2016 22:20:01

Hola.

Por este mensaje,
Cita:

Empezado por marilinspi (Mensaje 509374)
hola, la base de datos es Firebird y obtengo los datos mediante un SqlDataSet, DataSetProvider y CLienteDataSet
Gracias

había entendido que usabas un ClientDataSet que es donde deberías usar los aggregates.

Saludos :)


La franja horaria es GMT +2. Ahora son las 10:55:55.

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