Ir al contenido


Foto

sumar columna de StringGrid


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

#1 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 26 junio 2012 - 11:10

que hay amigos a ver quien puede echarme una mano tengo un stringgrid al cual le voy agregando datos por medio de un edit hasta ahi todo bien mi problema es que quiero lograr sumar toda una columna llamada importe y lo intento con el siguiente codigo pero me marca el siguiente error:
exception class Econvert Error with message "" is not a valid integer value y lo extraño es que si meto 4 registros si me hace la suma ojala puedan ayudarme




delphi
  1. var
  2. i, suma: integer;
  3. begin
  4. suma:=0;
  5. for i:=0 to StringGrid1.ColCount-1 do
  6. if i<=StringGrid1.ColCount-2 then
  7. suma:=suma+ StrToInt(StringGrid1.Cells[4,i+1]);
  8.  
  9. label7.Caption:= intToStr(suma);


  • 0

#2 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 26 junio 2012 - 11:21

que hay amigos a ver quien puede echarme una mano tengo un stringgrid al cual le voy agregando datos por medio de un edit hasta ahi todo bien mi problema es que quiero lograr sumar toda una columna llamada importe y lo intento con el siguiente codigo pero me marca el siguiente error:
exception class Econvert Error with message "" is not a valid integer value y lo extraño es que si meto 4 registros si me hace la suma ojala puedan ayudarme




delphi
  1. var
  2. i, suma: integer;
  3. begin
  4. suma:=0;
  5. for i:=0 to StringGrid1.ColCount-1 do
  6. if i<=StringGrid1.ColCount-2 then
  7. suma:=suma+ StrToInt(StringGrid1.Cells[4,i+1]);
  8.  
  9. label7.Caption:= intToStr(suma);



No he usado mucho el TStringGrid, pero te puedo sugerir que sumes los valores ANTES de ponerlos en el StringGrid, por aquéllo de los errores raros, insolubles y que te quiebran la cabeza.

Sí, lo sé, no es "elegante", pero es efectivo...  ;) :p :D
  • 0

#3 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 26 junio 2012 - 12:32

es que el problema es que voy agregando producto por producto al stringgrid y hasta al ultimo mediante un boton activo la funcion que quiero hacer de sumar y me de el resultado en un label no se si haya otro metodo mas facil de lograr lo que quiero
  • 0

#4 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 26 junio 2012 - 12:49

ya me ayudaron con mi problema solo era modificar una linea de codigo por lo siguiente



delphi
  1. suma:= suma + StrToIntDef(StringGrid1.Cells[4,i+1], 0);



pero ahora mi problema es que nomas me suma 4 registros a ver si alguien puede echarme una mano con eso
  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 26 junio 2012 - 05:40

Te suma  solo 4 porque estabas trabajando en función de las columnas y no en función de las filas, cámbialo por esto:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   k, suma: integer;
  4. begin
  5.   suma := 0;
  6.   for k := 0 to StringGrid1.RowCount - 1 do
  7.     if k <= StringGrid1.RowCount - 2 then
  8.       suma := suma + StrToIntdef(StringGrid1.Cells[4, k + 1], 0);
  9.   Label7.Caption := intToStr(suma);
  10. end;



Pregunto: Estás haciendo algo especial con la última fila? de no ser así la siguiente línea sobra


delphi
  1. if k <= StringGrid1.RowCount - 2 then



Igualmente si tienes una fila de encabezado la variable K podría iniciar la iteración en 1 y no en cero.

Saludos
  • 0

#6 edgar_prospero

edgar_prospero

    Advanced Member

  • Miembros
  • PipPipPip
  • 136 mensajes

Escrito 27 junio 2012 - 08:10

muchas gracias por tu ayuda wilson es justo lo que necesitaba si andaba un poco perdido jeje saludos  (b)
  • 0

#7 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 22 agosto 2013 - 12:34

Favor explicarme el codigo que puso el amigo wilson yo estoy trantado de hacer lo mismo

esto es lo que tengo:



delphi
  1. procedure TForm1.cantKeyPress(Sender: TObject; var Key: Char);
  2.   var
  3.     k, suma: integer;
  4. begin
  5.   if not(Key in ['0'..'9',#8]) then
  6. begin
  7.  
  8. if key = #13 then
  9.  
  10. begin
  11.   agregar.SetFocus;
  12. end;
  13.  
  14. if not(Key in ['0'..'9',#8]) then
  15. begin
  16.   Key:=#0;
  17.  
  18.  
  19.  
  20. StringGrid1.Row := StringGrid1.Rowcount - 1; //No situamos sobre el ultimo registro (el nuevo)
  21. StringGrid1.Cells[0, StringGrid1.Row] := cant.Text;
  22. StringGrid1.Cells[1, StringGrid1.Row] := desc.Text;
  23. StringGrid1.Cells[2, StringGrid1.Row] := prec.Text;
  24.  
  25.  
  26.   suma := 0;
  27.   for k := 0 to StringGrid1.RowCount - 1 do
  28.     if k <= StringGrid1.RowCount - 2 then
  29.       suma := suma + StrToIntdef(StringGrid1.Cells[4, k + 1], 0);
  30.   sLabel3.Caption := intToStr(suma);
  31.  
  32.   StringGrid1.RowCount := StringGrid1.RowCount + 1;




  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 22 agosto 2013 - 06:17

Amigo, entiendo que quieres  hacer algo al presionar la tecla enter; ¿Que es justo lo que quieres hacer?

Saludos.
  • 0

#9 amell2020

amell2020

    Advanced Member

  • Miembros
  • PipPipPip
  • 340 mensajes
  • LocationEn un solo Lugar

Escrito 22 agosto 2013 - 08:25

bueno quería agregar los campos que tengo en un stringgrid pero mejor usare el DBgrid conectado la base de datos y cuando guarde el registro le hago una consulta max registro y así hasta hora me esta funcionando, solo tengo unos problemas que si no encuentre la solucion, tratare de postear haber si me orientan en un post nuevo gracias wilson
  • 0




IP.Board spam blocked by CleanTalk.