Ir al contenido


Foto

sumar en un dbgrid


  • Por favor identifícate para responder
9 respuestas en este tema

#1 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 20 septiembre 2012 - 11:34

que hay amigos pues por aqui de nuevo ahora con otro problemilla resulta que voy metiendo registros  a un dbgrid por medio de un clientdataset y no se guardan hasta que le doy a un boton guardar bueno ahi todo bien si se van agregando mis registros sin ningun problema el asunto esta en que quiero que mediante vaya metiendo un registro se vaya sumando una columna llamda subtotal pero el resultado me lo vaya mostrando en un edit el codigo con lo que agrego es el siguiente:





delphi
  1. form4.clientdataset1.Append;
  2.  
  3. form4.clientdataset1['codigo'] := codigo.Text;
  4. form4.clientdataset1['descripcion'] := descripcion.Text;
  5. form4.clientdataset1['precio'] := precio.Text;
  6.   form4.clientdataset1['cantidad'] := cantidad.Text;
  7.   form4.clientdataset1['folio'] := folio.Text;
  8.   form4.clientdataset1['fecha'] := fecha.Date;
  9.   form4.clientdataset1['subtotal'] :=  floatToStr( StrTofloat(cantidad.Text) * StrTofloat(precio.Text) );


  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 20 septiembre 2012 - 11:48

Y ya tienes alguna idea amigo ???  :)

Saludox !
  • 0

#3 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 20 septiembre 2012 - 11:50

en alguna ocasion lo hice con un stringrid de la siguiente manera:




delphi
  1. procedure TForm4.codigoKeyUp(Sender: TObject; var Key: Word;
  2.   Shift: TShiftState);
  3.  
  4. var
  5.   k, suma: integer;
  6.  
  7. begin
  8.       suma := 0;
  9.  
  10.   for k := 0 to StringGrid1.RowCount - 1 do
  11.  
  12.       suma := suma + StrToIntdef(StringGrid1.Cells[4, k + 1], 0);
  13.  
  14. total.Caption := intToStr(suma);
  15.  
  16.  
  17. end;




pero esta forma no se como adaptarla para sumar en un dbgrid
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 20 septiembre 2012 - 11:51

Debes hacer uso del OnAfterPost del ClientDataSet para mostrar la sumatoria en un TEdit u otro sitio, algo asi:



delphi
  1. procedure TForm1.ClientDataset1AfterPost(DataSet: TDataSet);
  2. var Total: Double;
  3. begin
  4.   //Inicializamos la variable
  5.   Total := 0;
  6.  
  7.   ClientDataSet1.First;
  8.   while not ClienteDataSet1.eof do begin
  9.       Total := Total + clientdataset1.FieldByName('subtotal').AsFloat;
  10.       ClientDataSet1.Next;
  11.   end;
  12.  
  13.   Edit1.Text := FormatFloat('$#,##0.00', Total);
  14. end;
  15.  



OJO: Lo hice al vuelo, puede que tenga algún bug, pero al menos te da la idea ;)

Saludos.
  • 0

#5 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 20 septiembre 2012 - 12:00

gracias por responder amigo ya lo adecue pero hay un problemilla meto el primer registro y no me aparece nada en el label es apartir deñl segundo registro cuando empieza a aparecerme el resultado
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 20 septiembre 2012 - 12:06

gracias por responder amigo ya lo adecue pero hay un problemilla meto el primer registro y no me aparece nada en el label es apartir deñl segundo registro cuando empieza a aparecerme el resultado


Coloca tu adecuación para ver qué falta.
  • 0

#7 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 20 septiembre 2012 - 12:08

pues mas bien modifique cambiando double por total me imagino que fue error de dedo como dicen por hacerlo rapido el ejemplo :



delphi
  1. procedure TForm4.ClientDataSet1AfterPost(DataSet: TDataSet);
  2.  
  3. var Total: double;
  4. begin
  5.   ClientDataSet1.First;
  6.   while not ClientDataSet1.eof do begin
  7.       total := total + clientdataset1.FieldByName('subtotal').AsFloat;
  8.  
  9.       ClientDataSet1.Next;
  10.   end;
  11.  
  12.     label10.Caption := FormatFloat('$#,##0.00', total);
  13.  


  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 20 septiembre 2012 - 01:06

No puedes ver el resultado a la primera porque estás usando el evento AfterPost, y  el cálculo se efectúa  solo al llamar post al TClientDataset (esto pasa cuando cambias de línea en el DBGrid), si usas  campos persistentes realiza el mismo cálculo en el evento OnChange del campo subtotal.

Saludos
  • 0

#9 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 21 septiembre 2012 - 12:41

Ya que usas un TClientDataSet..... por qué no lo "exprimes" y haces ese sumatorio con un campo agregado y luego muestras el resultado (que sería automático) en un TDBText?

Nos leemos

  • 0

#10 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 21 septiembre 2012 - 07:18

Te faltó inicializar la variable Total := 0;, tembién puedes hacer lo que te indica cadetill.

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.