Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
problemas al Eliminar filas de un stringGrid

hola buenas tardes tengo un pequeño formulario de venta desarrollado en delphi 2010 en el cual listo productos los cuales tienen precio y cantidad y con esto saco el sub total que tambien esta guardado en el stringgrid. y la suma de todos estos sub totales se muestra en un tedit.
Cree un boton para eliminar el producto seleccionado que no quiera vender y al darle click lo saco de la lista
aca tengo los siguientes problemas problemas.
1) si tengo por ejemplo 5 productos cargados en el stringgrid al darle eliminar elimina todos menos el primero
2) partiendo del mismo ejemplo si elimino el producto del medio (supongamos el que esta en la fila 3) se eliminan todos
3) si quiero eliminar el primer producto de la lista se eliminan todos los demas menos este
4) si el item 1) que mencione elimina todo me queda solo 1 fila con un producto que no se elimina y al seguirle dando eliminar el valor del edit se va hasta -x por ejemplo

Este codigo es el que utilize para diseñar el boton

Código Delphi [-]
var
i:integer;
begin
inherited;
  if trim(eTotal.Text)=''   then
    eTotal.Text:= floattostr (strtofloat(eTotal.Text) - strtofloat(sgDetalle.Cells[4,sgDetalle.Row]));
  for i := sgDetalle.Row to sgDetalle.RowCount-2 do
  begin
    sgDetalle.Rows[i]:= sgDetalle.Rows[i+1] ;
    sgDetalle.Rows[sgDetalle.RowCount-1].Clear;
   if sgDetalle.RowCount > 2 then
  begin
   sgDetalle.RowCount:= sgDetalle.RowCount-1;
   end;
  end;
end;


y tambien dejo el codigo de creacion del stringgrid que este se encuentra en el evento onactivate del formulario
Código Delphi [-]
begin
eTotal.Text:='0';
sgDetalle.Cells[0,0]:='codigo';
sgDetalle.ColWidths[0]:=90;
sgDetalle.Cells[1,0]:='nombre';
sgDetalle.ColWidths[1]:=320;
sgDetalle.Cells[2,0]:='precio';
sgDetalle.ColWidths[2]:=90;
sgDetalle.Cells[3,0]:='cantidad';
sgDetalle.ColWidths[3]:=90;
sgDetalle.Cells[4,0]:='sub total';
sgDetalle.ColWidths[4]:=90;
end;

espero a ver sido bastante clara con mi problema cualquier cosa que no se entiendan me avisan.
desde ya muchas gracias
Responder Con Cita
  #2  
Antiguo 26-11-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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.

La forma mas simple de eliminar una fila del StringGrid es acceder al método DeleteRow para lo cuál previamente debes desproteger la clase TStringGrid:
Código Delphi [-]
...
type
  TStringGrid = class(Grids.TStringGrid); // <- desproteger

  TForm1 = class(TForm)
    sgDetalle: TStringGrid;
...

implementation

procedure TForm1.btnDeleteRowClick(Sender: TObject);
begin
  if MessageBox(0,'¿ Elimina la línea actual ?','', MB_ICONQUESTION+MB_YESNO) = IDYES then
    sgDetalle.DeleteRow( sgDetalle.Row );
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 26-11-2016
Belen12 Belen12 is offline
Miembro
NULL
 
Registrado: may 2016
Posts: 29
Poder: 0
Belen12 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

La forma mas simple de eliminar una fila del StringGrid es acceder al método DeleteRow para lo cuál previamente debes desproteger la clase TStringGrid:
Código Delphi [-]
...
type
  TStringGrid = class(Grids.TStringGrid); // <- desproteger

  TForm1 = class(TForm)
    sgDetalle: TStringGrid;
...

implementation

procedure TForm1.btnDeleteRowClick(Sender: TObject);
begin
  if MessageBox(0,'¿ Elimina la línea actual ?','', MB_ICONQUESTION+MB_YESNO) = IDYES then
    sgDetalle.DeleteRow( sgDetalle.Row );
end;
...

Saludos
probe tu codigo y sucedio lo siguiente. cuando agrego 3 y borro los 3. al cargar uno nuevo se carga el ultimo borrado mas el nuevo producto y la primera fila donde tengo las celdas de "nombre, precio,cantidad,subtotal' se borra y se superpone el ultimo que agregue :/
Responder Con Cita
  #4  
Antiguo 26-11-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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.

Por lo que comentas, pareciera que quedan datos residuales, intentalo de este modo:
Código Delphi [-]
procedure TForm1.btnDeleteRowClick( Sender: TObject );
begin
  sgDetalle.Rows[sgDetalle.Row].Clear;  
  if sgDetalle.RowCount > sgDetalle.FixedRows + 1 then
     sgDetalle.DeleteRow( sgDetalle.Row );
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 26-11-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Belen12 Ver Mensaje
tengo los siguientes problemas problemas.
1) si tengo por ejemplo 5 productos cargados en el stringgrid al darle eliminar elimina todos menos el primero
2) partiendo del mismo ejemplo si elimino el producto del medio (supongamos el que esta en la fila 3) se eliminan todos
3) si quiero eliminar el primer producto de la lista se eliminan todos los demas menos este
4) si el item 1) que mencione elimina todo me queda solo 1 fila con un producto que no se elimina y al seguirle dando eliminar el valor del edit se va hasta -x por ejemplo
Realmente, la idea original no está mal. El problema es que reduces el número de filas en cada vuelta del ciclo y debes hacerlo sólo hasta el final, es decir, después del ciclo. Algo como:

Código Delphi [-]
for i := sgDetalle.Row to sgDetalle.RowCount-2 do
begin
  sgDetalle.Rows[i]:= sgDetalle.Rows[i + 1];
end;

sgDetalle.RowCount := sgDetalleRowCount - 1;

LineComment Saludos
Responder Con Cita
Respuesta



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
Cómo borrar filas de un StringGrid sac OOP 3 28-04-2008 10:51:23
filas selecionadas en stringgrid cojones OOP 1 23-02-2007 18:03:34
Selección de filas en un StringGrid Ricardo León Varios 2 10-02-2006 00:26:13
Eliminar filas en Excel Monica Martin Servers 1 08-06-2004 14:22:13
Filas de colores en Stringgrid Carlos Arevalo Varios 16 09-01-2004 22:26:45


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


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
Copyright 1996-2007 Club Delphi