Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Eliminando items de un Grid

Pregunta. tengo un grid al cual le agrego artículos, pero al momento de eliminar, uso la siguiente función,
Código Delphi [-]
procedure EliminarLinea(Grid: TStringGrid; ARow: Integer);
var
  i: Integer;
begin
  for i := ARow to Grid.RowCount - 2 do
    Grid.Rows[i].Assign(Grid.Rows[i + 1]);
  Grid.RowCount := Grid.RowCount - 1;
end;

Para eliminar la linea actualmente seleccionada, pero llega un punto donde las lineas ya se acaban y solo quedan las de cabecera, entonces cuando elimina la ultima la cabecera pierde el formado, alguna forma de evitar que se elimine la ultima linea cuando ya no hayan mas artículos en la lista?

Gracias.
Responder Con Cita
  #2  
Antiguo 19-12-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Debería bastar con añadir al princippio de la función EliminarLinea las siguientes líneas:
Código Delphi [-]
  if (ARow = 0) or (Grid.RowCount = 1) then
    Exit;
Evitas que lo llamen con la línea 0 como parámetro 0 con otro valor pero cuando sólo queda 1.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 19-12-2018
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.

Mediante un ejemplo, te agrego otra opción de borrado:
Código Delphi [-]
...

type
  TStringGrid = class(Grids.TStringGrid); // (*)

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    btnDelete: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnDeleteRowClick(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  c,r,x: Integer;
begin
  x := 0;
  StringGrid1.Rows[0].CommaText := 'COL1,COL2,COL3,COL4,COL5';
  for r := StringGrid1.FixedRows to StringGrid1.RowCount-1 do
    for c := StringGrid1.FixedCols to StringGrid1.ColCount-1 do
    begin
      StringGrid1.Cells[c,r] := Format('cell %d', [x]);
      Inc(x);
    end;
  StringGrid1.Row:= StringGrid1.RowCount-1; // ir a la última fila
end;

procedure TForm1.btnDeleteRowClick(Sender: TObject);
begin
  if StringGrid1.Row > StringGrid1.FixedRows then
    StringGrid1.DeleteRow(StringGrid1.Row)
  else
    StringGrid1.Rows[1].Text := '';
end;
...
(*) Clase TStringGrid desprotegida para acceder al método protegido DeleteRow ( también podes acceder al método DeleteColumn )

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 20-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Gracias amigos!
Responder Con Cita
  #5  
Antiguo 23-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Mediante un ejemplo, te agrego otra opción de borrado:
Código Delphi [-]
...

type
  TStringGrid = class(Grids.TStringGrid); // (*)

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    btnDelete: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnDeleteRowClick(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  c,r,x: Integer;
begin
  x := 0;
  StringGrid1.Rows[0].CommaText := 'COL1,COL2,COL3,COL4,COL5';
  for r := StringGrid1.FixedRows to StringGrid1.RowCount-1 do
    for c := StringGrid1.FixedCols to StringGrid1.ColCount-1 do
    begin
      StringGrid1.Cells[c,r] := Format('cell %d', [x]);
      Inc(x);
    end;
  StringGrid1.Row:= StringGrid1.RowCount-1; // ir a la última fila
end;

procedure TForm1.btnDeleteRowClick(Sender: TObject);
begin
  if StringGrid1.Row > StringGrid1.FixedRows then
    StringGrid1.DeleteRow(StringGrid1.Row)
  else
    StringGrid1.Rows[1].Text := '';
end;
...
(*) Clase TStringGrid desprotegida para acceder al método protegido DeleteRow ( también podes acceder al método DeleteColumn )

Saludos
Con esto...
Código Delphi [-]
if SG.Row > SG.FixedRows then
   SG.DeleteRow(SG.Row)
  else
    SG.Rows[1].Text := '';

Cuando ya tienes varios articulos, y eliminas el primero, solo limpia la primera linea, es decir "No la elimina" alguna idea de como resolver esto?
Responder Con Cita
  #6  
Antiguo 24-12-2018
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.
Cita:
Empezado por feliz-58 Ver Mensaje
Cuando ya tienes varios articulos, y eliminas el primero, solo limpia la primera linea, es decir "No la elimina" alguna idea de como resolver esto?
Siempre tendrás al menos una línea.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 24-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Siempre tendrás al menos una línea.

Saludos

Me explico, tengo 3 articulos:
---Articulo1---
---Articulo2---
---Articulo3---


si selecciono el primero, y lo "Elimino", solo limpia las celdas, no desplaza todo hacia arriba (Como deberia ser), esto solo pasa cuando hay mas de 1 articulo e intentas "Eliminar" el primero.
Responder Con Cita
  #8  
Antiguo 24-12-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Hay algún motivo por el que no usas un dbgrid?
Creo que te facilitarán las cosas.
Responder Con Cita
  #9  
Antiguo 24-12-2018
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
idem... .

Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Hay algún motivo por el que no usas un dbgrid? Creo que te facilitarán las cosas.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #10  
Antiguo 24-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Hay algún motivo por el que no usas un dbgrid?
Creo que te facilitarán las cosas.
y guardarlos en una tabla temporal?
Responder Con Cita
  #11  
Antiguo 24-12-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por feliz-58 Ver Mensaje
y guardarlos en una tabla temporal?
¿Y por qué en una tabla temporal?
Salvo que haya algún motivo que lo haga necesario.
Responder Con Cita
  #12  
Antiguo 24-12-2018
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.
Cita:
Empezado por feliz-58 Ver Mensaje
si selecciono el primero, y lo "Elimino", solo limpia las celdas, no desplaza todo hacia arriba (Como deberia ser)
...
Ese es el punto que te explicaba anteriormente. Para el componente TStringGrid ese el comportamiento esperado. En cambio si vas a obtener lo que deseas usando el componente TDBGrid, como te están aconsejando los compañeros.


Cita:
Empezado por feliz-58 Ver Mensaje
y guardarlos en una tabla temporal?
Por ejemplo usando un TClientDataSet en memoria, revisa este enlace: Búsqueda de archivos ordenada por fecha

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 25-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Ese es el punto que te explicaba anteriormente. Para el componente TStringGrid ese el comportamiento esperado. En cambio si vas a obtener lo que deseas usando el componente TDBGrid, como te están aconsejando los compañeros.



Por ejemplo usando un TClientDataSet en memoria, revisa este enlace: Búsqueda de archivos ordenada por fecha

Saludos
Muchas Gracias, luego de cenar lo reviso xD, Provecho!
Responder Con Cita
  #14  
Antiguo 26-12-2018
feliz-58 feliz-58 is offline
Miembro
 
Registrado: sep 2012
Posts: 314
Poder: 12
feliz-58 Va por buen camino
Resuelto

Pff Mil Gracias, con esta combinación de componente, me ahorre muchos dolores de cabeza y me facilito la vida.
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
App Android esta eliminando el folder res, XE5 dison Desarrollo en Delphi para Android 1 14-04-2014 15:48:01
Lanzando, capturando, eliminando sonidos R0M3R0 OOP 4 13-10-2008 22:19:16
Eliminando items en TTimer... [Gunman] OOP 7 02-02-2006 01:17:24
Problemas Eliminando Tablas En Mysql tebyr MySQL 2 20-11-2004 17:21:33
Eliminando contenido de campo Blob Ignacio Firebird e Interbase 1 18-11-2004 00:45:33


La franja horaria es GMT +2. Ahora son las 16:26:39.


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