Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2012
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 835
Poder: 24
gatosoft Va camino a la fama
Adicionalmente a lo que dice Román, debes hacer unos ajustes a tu código...

1) Si quieres sumar todas las filas de todas las columnas, debes hacer un doble ciclo anidado...

For i:= 1 to ColCount-1 do
For j:=1 to RowCount -1 do
{Aqui sumas tus FILAS....Cells[i,j]}

2) Asignar el resultado de la casilla modificada como dice Román
Cells[i,j] := Trim(Cells[i,j]);


3) Recordar que si quieres que el for trabaje para mas de una linea debes encerrar la sentencia en un bloque Begin..end, ya que en tu ejemplo, el for termina y al final (solo al final del recorrido) ejecuta la sentencia:
suma:=suma+StrToInt(Cells[1,j]); lo cual quiere decir que solo sumaste una casilla...


Espermos la versión dos de tu tarea...!
Responder Con Cita
  #2  
Antiguo 25-04-2012
Avatar de PaulaGV
PaulaGV PaulaGV is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 34
Poder: 0
PaulaGV Va por buen camino
Thumbs up sumar elementos de un StringGrid

muchísimas gracias!!!muy claras las respuestas, apenas tenga la segunda versión la estaré publicando!
Responder Con Cita
  #3  
Antiguo 25-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola PaulaGV.

Agregando algo a lo que correctamente te han sugerido, noté que mencionas que vas a usar la última columna de cada fila para poner el resultado de la sumatoria de sus columnas, es decir que deberías impedir que se pueda escribir en ColCount - 1:
Código Delphi [-]
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
   CanSelect := ACol <> StringGrid1.ColCount - 1;
end;

Otra opción que sumaría los valores enteros, sin provocar una excepcion ante posibles valores alfanuméricos, es usando la función TryStrToInt:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  c ,f ,v, suma: integer;
begin
  with StringGrid1 do
  begin
    for f:= FixedRows to RowCount - 1 do
    begin
      suma:= 0;
      for c:= FixedCols to ColCount - 2 do
        if TryStrToInt(Trim(Cells[c,f]), v) then
          suma:= suma + v;
      Cells[ColCount-1, f]:= IntToStr(suma)
    end
  end
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 25-04-2012 a las 06:29:24.
Responder Con Cita
  #4  
Antiguo 25-04-2012
Avatar de PaulaGV
PaulaGV PaulaGV is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 34
Poder: 0
PaulaGV Va por buen camino
Smile Sumar el contenido de una fila o columna en un String Grid

muchas gracias!!igual lo voy a probar... ya arme un código con las primeras respuestas y me quedo así:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,suma:integer;
begin
with StringGrid1 do
begin
suma:=0;
  for i := 1 to ColCount - 1 do
    for j := 1 to RowCount - 1 do
      begin
        Cells[i,j]:=Trim(Cells[i,j]);
        suma:=suma+ StrToIntDef(Cells[i,j],0);
      end;
end;
StringGrid1.Cells[1,4]:=IntToStr(suma);
end;

es una simple prueba para ver si funcionaba la parte de contar cada elemento en el StringGrid, por eso se le asigne el resultado yo misma a la ultima celda, luego tengo que modificar el código para que haga lo mismo con cada fila del StringGrid, ahora mi duda es otra, yo entiendo que la funcion TRIM quita los blancos en una cadena, entonces por que si no uso StrToIntDef en vez de StrToInt en el siguiente fragmento de codigo aparece el error '' is no a integer value?. Ademas que yo le puse una mascara para que solo se puedan ingresar números.Desde ya gracias!!


Código Delphi [-]
 suma:=suma+ StrToIntDef(Cells[i,j],0);
Responder Con Cita
  #5  
Antiguo 25-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
entonces por que si no uso StrToIntDef en vez de StrToInt en el siguiente fragmento de codigo aparece el error '' is no a integer value?.
Hola Paula.

Eso sucede por que Trim no produce ningún efecto cuando se aplica a una celda vacía ya que no tiene 'nada' para quitar. Es decir que tanto
Código Delphi [-]
  StrToInt('');
como
Código Delphi [-]
  StrToInt(Trim(''));
lanzarán una excepción.


El uso que haces de StrToIntDef es correcto, incluso más simple que TryStrToInt (aunque igual realiza la tarea).
Podrías eso sí, ahorrarte una línea y un begin/end usando Trim dentro de StrToIntDef:
Código Delphi [-]
    for j := 1 to RowCount - 1 do
      suma:= suma + StrToIntDef(Trim(Cells[i,j]), 0);

Creo que te quedaría de este modo:
Código Delphi [-]
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
   CanSelect := ACol <> StringGrid1.ColCount - 1; // no permite selección si es últimca columna
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  c , f, suma: integer;
begin
  with StringGrid1 do
  begin
    for f:= FixedRows to RowCount - 1 do // para c/fila
    begin
      suma:= 0; 
      for c:= FixedCols to ColCount - 2 do // para c/columna (menos la última)
        suma:= suma + StrToIntDef(Trim(Cells[c, f]), 0); // sumar
      Cells[ColCount-1, f]:= IntToStr(suma) // mostrar resultado en última columna
    end
  end
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 25-04-2012
Avatar de PaulaGV
PaulaGV PaulaGV is offline
Miembro
NULL
 
Registrado: mar 2012
Posts: 34
Poder: 0
PaulaGV Va por buen camino
Talking Como sumar elementos de un stringGrid

muchisimas gracias por las respuestas todas me fueron muy utiles!!!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como borrar elementos de un stringGrid PaulaGV OOP 3 25-04-2012 20:19:43
Como Borrar una fila del Stringgrid de forma correcta? escorpionrojo43 OOP 1 24-07-2011 19:11:52
Sumar elementos de una list box yessika19 Varios 4 05-01-2008 20:57:18
Sumar elementos de un ListBox creus Varios 4 16-01-2007 19:34:05
como eliminar una fila del stringGrid. Arturo Varios 3 12-10-2006 20:54:04


La franja horaria es GMT +2. Ahora son las 18:12:46.


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