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 31-03-2015
p1p3 p1p3 is offline
Registrado
NULL
 
Registrado: jul 2013
Posts: 9
Poder: 0
p1p3 Va por buen camino
Como eliminar una o varias filas de un TAdvStringGrid

Saludos a todos los participantes del foro.

Por favor me pueden ayudar informándome como eliminar una o varias filas en un AdvStrigGrid, he encontrado respuestas en este foro y he tratado de implementarlo en mi código sin resultado alguno.

bueno, lo que hago es generar una o varias filas con sus respectivos checks.
Código Delphi [-]
GridProcedimientos.AddRow;
 for  i := 1 to GridProcedimientos.RowCount -1 do
    begin
      GridProcedimientos.AddCheckBox(0,i,False, True);
      GridProcedimientos.ReadOnly[1,i]:=True;
      GridProcedimientos.ReadOnly[5,i]:=True;
    end;
Hasta aquí todo bien...Cuando selecciono varios check y los quiero eliminar me elimina un solo o todos los registros, el código esta así:
Código Delphi [-]
for i:=1 to GridProcedimientos.RowCount do
 begin
    if GridProcedimientos.GetCheckBoxState(0,i,state)then
    begin
       if state then
           GridProcedimientos.RemoveSelectedRows;//esta linea solo elimina uno por uno
   end;
 end;
Tambien lo he hecho con esta linea
Código Delphi [-]
GridProcedimientos.RemoveRows(GridProcedimientos.Row, GridProcedimientos.RowCount);//esta elimina todas las filas

Agradezco el tiempo que le dedican a mi pregunta.

Última edición por nlsgarcia fecha: 01-04-2015 a las 02:46:27. Razón: Sintaxis Delphi
Responder Con Cita
  #2  
Antiguo 31-03-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
No conozco el componente pero a simple vista puede decirse que funciona "igual" al TStringGrid standart
1) RemoveSelectedRows no necesariamente elimina una por una. En realidad elimina la fila seleccionada cuando le haces click con el boton izq. La que esta "sombreada en azul" (me imagino por defecto). Tambien seguro tiene una propiedad multi select que si la pones a true te deja seleccionar varias filas apretando shift o alguna otra tecla, y entonces si llamas a RemoveSelectedRows te elimina todas las seleccionadas.

Dicho esto, Lo que hace tu for es recorrer todo el grid, hace una "pregunta" (no importa realmente que) y si da true, elimina la(s) fila seleccionada. Supongamos que esta seleccionada la primer fila cuando llamas a ese codigo, entonces elimina la primera, luego la seleccionada pasa a ser la de abajo, y si el codigo vuevle a dar true, te elimina la segunda (que ahora seria la primera). Osea que te puede pasar que estes preguntando por el checkbox i-esimo y estas eliminando otra fila, Me sigues?

2) RemoveRows. Este tiene pinta de que le das un valor de inicio y uno de fin, supongamos i y j. Entonces lo que hace es eliminar todas las filas que esten entre a y j. Lo que hace una llamda como la de tu codigo:

Código Delphi [-]

GridProcedimientos.RemoveRows(GridProcedimientos.Row, GridProcedimientos.RowCount);

RowCount es la cantidad de filas, si tenes seleccionada la primera (GridProcedimientos.Row), entonces estas diciendole que elimine todo

Lo que tendrias que hacer es un for similar al que pusiste primero, pero en ves de llamar a RemoveSelectedRows, tendrias que ver la forma de eliminar la fila i-esima (la que coincide con el checkbox del cual estas preguntando el estado)

A ver si te sale, suerte!
Responder Con Cita
  #3  
Antiguo 31-03-2015
p1p3 p1p3 is offline
Registrado
NULL
 
Registrado: jul 2013
Posts: 9
Poder: 0
p1p3 Va por buen camino
Muchas gracias por tu repuesta AgustinOrtu tu comentario me ayuda mucha no había caído en cuenta en la parte que comentas... "Supongamos que esta seleccionada la primer fila cuando llamas a ese código, entonces elimina la primera, luego la seleccionada pasa a ser la de abajo, y si el código vuelve a dar true, te elimina la segunda (que ahora seria la primera). Osea que te puede pasar que estés preguntando por el checkbox i-esimo y estas eliminando otra fila".

pienso ahora que si lo recorro de abajo hacia arriba no debería tener ese problema, voy a intentarlo y ya les comentare...

Son muy amables al responder tan pronto, Muchas pero muchas gracias...Son una gran ayuda
Responder Con Cita
  #4  
Antiguo 31-03-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Deberia haber algun metodo que deje borrar fila por su indice, pero al no tener ese componente no puedo verificarlo

Por lo pronto podrias eliminar una sola fila haciendo uso del RemoveRows en tu bucle for

Código Delphi [-]
if state then
  // depende de como este implementado, deberias probar para ver cual es el correcto
  GridProcedimientos.RemoveRows(i, i+1);
  GridProcedimientos.RemoveRows(i, i);

Saludos!
Responder Con Cita
  #5  
Antiguo 31-03-2015
p1p3 p1p3 is offline
Registrado
NULL
 
Registrado: jul 2013
Posts: 9
Poder: 0
p1p3 Va por buen camino
Me funciono con el siguiente código
Código Delphi [-]
i:=GridProcedimientos.RowCount;
 while i>1 do
 begin
    if GridProcedimientos.GetCheckBoxState(0,i,state)then
    begin
       if state then
          GridProcedimientos.RemoveSelectedRows;
    end;
 i:=i-1;   
end;
De esta forma no tengo problema con el indice....Estuve verificando en las propiedades de AdvStringGrid y no encontré la opción de multi select que mencionas, pero tiene Multilinecells; seria verificar con esta opción.

Tus comentarios me fueron de gran ayuda AgustinOrtu

Última edición por nlsgarcia fecha: 01-04-2015 a las 02:45:33. Razón: Sintaxis Delphi
Responder Con Cita
  #6  
Antiguo 31-03-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Solo para ahorrarte dolor de cabeza mas adelante, hace la siguiente prueba:

Selecciona la ultima fila con el mouse del grid, y despues llama a tu codigo a ver si funciona correctamente

Saludos!

PD: Usa el Tag [ DELPHI ] [ / DELPHI ] para que salga la identacion y resalte las palabras claves de delphi
Responder Con Cita
  #7  
Antiguo 01-04-2015
Avatar de radenf
radenf radenf is offline
Miembro
 
Registrado: oct 2007
Ubicación: Viña del Mar,Chile
Posts: 608
Poder: 17
radenf Va por buen camino
Estimado p1p3:

Prueba con las propiedades DisjunctRowSelect y DisjunctRowSelectnoCtrl que se encuentran en MouseActions del TAdvStringGrid.
Con ellas podrás seleccionar varias filas consecutivas al hacer Click+Shift o alternadas al hacer Click+Ctrl y así podrás eliminar o editar las filas que selecciones.
Salu2
Responder Con Cita
  #8  
Antiguo 02-04-2015
p1p3 p1p3 is offline
Registrado
NULL
 
Registrado: jul 2013
Posts: 9
Poder: 0
p1p3 Va por buen camino
Empezare a probar las sugerencias que me indican AgustinOrtu y radenf, Gracias por dedicarme tiempo a resolver esta duda
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
¿control tipo TAdvStringGrid o stringrid con componentes en las filas? JXJ Varios 1 07-08-2023 21:35:40
Caption de Label en varias filas Novatin C++ Builder 6 03-07-2013 06:24:52
unir varias filas en una sola microbiano SQL 4 26-04-2010 19:28:27
Marcar varias filas de dbgrid Kenobi Varios 3 02-02-2010 16:22:03
Como veo varias filas con un Store Procedure tulio Firebird e Interbase 2 24-05-2004 19:16:23


La franja horaria es GMT +2. Ahora son las 16:06:18.


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