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 31-01-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Eliminación Selectiva en ListView

Tengo un problema, yo quiero eliminar los items de un ListView segun se cumpla la condicion que establezco, siendo por ejemplo, un string en un subitem determinado; lo que hago es lo siguiente:

Código Delphi [-]
if ListView2.Items.Count>0
            then begin
              for w:=0 to ListView2.Items.Count-1 do
                begin
                  if ((LowerCase(ListView2.Items.Item[w].SubItems.Strings[8]))=ruta) 
// lo verifique y ambas cadenas de strings son identicas, 
//cumple la condicion perfectamente, pero al eliminar......
                    then begin
                          ListView2.Items.Delete(ListView2.Items.Item[w].Index);
                          //Tira error Access Violation...etc.
                    end;
                end;
            end;

Que estoy haciendo mal?
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #2  
Antiguo 31-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Por que no usas directamente el valor de w para referenciar el Item que quieres eliminar?

Código Delphi [-]
if ListView2.Items.Count > 0 then
  for w := 0 to Pred(ListView2.Items.Count) do
    if LowerCase(ListView2.Items[w].SubItems[8]) = Ruta then
      ListView2.Items.Delete(w)


Saludos...
Responder Con Cita
  #3  
Antiguo 31-01-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
Hola...

Por que no usas directamente el valor de w para referenciar el Item que quieres eliminar?


Código Delphi [-]
if ListView2.Items.Count > 0 then
for w := 0 to Pred(ListView2.Items.Count) do
if LowerCase(ListView2.Items[w].SubItems[8]) = Ruta then
ListView2.Items.Delete(w)






Saludos...
Me tirar error access violation, otra vez
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #4  
Antiguo 31-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

El código que pusiste es exactamente el que usas? Por que ese código no muestra nada que pueda provocar ese error...



Saludos...
Responder Con Cita
  #5  
Antiguo 31-01-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Me parece que debes recorrer la lista alrevés. En lugar de

Código Delphi [-]
for w := 0 to Pred(ListView2.Items.Count) do

prueba con

Código Delphi [-]
for w := Pred(ListView2.Items.Count) downto 0 do

Bye
Responder Con Cita
  #6  
Antiguo 31-01-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Iba sugerirte lo mismo que keyboy, a mí me pasaba lo mismo con TStrings, hasta que me di cuenta de que si si recorro del 0 al 10, cuando he borrado los cinco primeros, después no hay elemento 6, ni 7....

por eso hay que ir desde el último hasta el primero.


Salu2.
Responder Con Cita
  #7  
Antiguo 31-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cierto, cierto... pasé en alto ese aspecto... xDDD

Prueba a cambiar el ciclo for como ya te han recomendado y tu problema debería solucionarse...



Saludos...
Responder Con Cita
  #8  
Antiguo 31-01-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Tambien es quizá, porque el Item que esta en la posicion involucrada realmente no existe, según lo que entiendo, lo que quiere mamu es eliminar el SubItem 8 de un Item... lo cual se lograría asi, tomando como referencia el codigo de maeyanes y de keyboy:

Código Delphi [-]
if ListView2.Items.Count > 0 then
  for w := Pred(ListView2.Items.Count) downto 0 do
     if LowerCase(ListView2.Items[w].SubItems[8]) = Ruta then
       ListView2.Items[w].SubItem.Delete(8);

Bueno, eso es lo que creo que se necesita, espero que asi sea y que funcione .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 31-01-2008 a las 20:23:02. Razón: Ajustar el codigo a la sugerencia de keyboy que es muy acertada...
Responder Con Cita
  #9  
Antiguo 31-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cita:
Empezado por jhonny Ver Mensaje
Quizá es porque el Item que esta en la posicion involucrada realmente no existe, según lo que entiendo, lo que quiere mamu es eliminar el SubItem 8 de un Item... lo cual se lograría asi, tomando como referencia el codigo de maeyanes:

Código Delphi [-]
if ListView2.Items.Count > 0 then
  for w := 0 to Pred(ListView2.Items.Count) do
    if LowerCase(ListView2.Items[w].SubItems[8]) = Ruta then
      ListView2.Items[w].SubItem.Delete(8);

Bueno, eso es lo que creo que se necesita, espero que asi sea y que funcione .
Bueno, lo que yo entiendo es que quiere eliminar el Item en el que el SubItem con índice 8 tenga un valor igual a la variable Ruta...



Saludos...
Responder Con Cita
  #10  
Antiguo 31-01-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por maeyanes Ver Mensaje
Hola...



Bueno, lo que yo entiendo es que quiere eliminar el Item en el que el SubItem con índice 8 tenga un valor igual a la variable Ruta...



Saludos...
Si, esa es una duda que me ronda en la cabeza desde que leí la pregunta , no se si la cosa es como yo la entendí o como ustedes la han entendido , si mamu necesita lo que ustedes han comentado, bastaria con lo que tu y keyboy han sugerido , si no, solo hay que hacerle ese ajustecito.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #11  
Antiguo 31-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Cita:
Empezado por jhonny Ver Mensaje
Si, esa es una duda que me ronda en la cabeza desde que leí la pregunta , no se si la cosa es como yo la entendí o como ustedes la han entendido , si mamu necesita lo que ustedes han comentado, bastaria con lo que tu y keyboy han sugerido , si no, solo hay que hacerle ese ajustecito.
Bueno... que no se diga que en este Club no se dan varias soluciones para un problema...



Saludos...
Responder Con Cita
  #12  
Antiguo 31-01-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por jhonny Ver Mensaje
Tambien es quizá, porque el Item que esta en la posicion involucrada realmente no existe, según lo que entiendo, lo que quiere mamu es eliminar el SubItem 8 de un Item... lo cual se lograría asi, tomando como referencia el codigo de maeyanes y de keyboy:

Código Delphi [-]if ListView2.Items.Count > 0 then for w := Pred(ListView2.Items.Count) downto 0 do if LowerCase(ListView2.Items[w].SubItems[8]) = Ruta then ListView2.Items[w].SubItem.Delete(8);


Bueno, eso es lo que creo que se necesita, espero que asi sea y que funcione .

¿No saldría un error tipo "List index out of bounds (8)" o algo así?
Responder Con Cita
  #13  
Antiguo 31-01-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por keyboy Ver Mensaje
Me parece que debes recorrer la lista alrevés. En lugar de


Código Delphi [-]
for w := 0 to Pred(ListView2.Items.Count) do





prueba con


Código Delphi [-]
for w := Pred(ListView2.Items.Count) downto 0 do





Bye
SOLUCIONADO

Aplicando el razonamiendo de keyboy
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #14  
Antiguo 31-01-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por ixMike Ver Mensaje
¿No saldría un error tipo "List index out of bounds (8)" o algo así?
Si, pero me supuse que de alguna manera todos los Items tienen el SubItem 8, o que mamu lo ha puesto como ejemplo, ya que desde antes se evalua en esta linea .

Código Delphi [-]
if LowerCase(ListView2.Items[w].SubItems[8]) = Ruta then

Bueno, pero de todas formas, por lo visto la cosa funciono bien .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 31-01-2008 a las 21:01:21.
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
problema de eliminacion nikotina SQL 2 28-02-2007 14:34:21
Problemas de Eliminación Palmiro Conexión con bases de datos 8 03-02-2006 14:45:14
procedimiento de eliminacion kejos MS SQL Server 3 30-01-2006 16:46:02
problemas de eliminacion alfil123 Conexión con bases de datos 14 22-12-2005 00:22:00
Consulta Selectiva sobre Store Procedure raul_sal SQL 5 19-07-2003 21:35:37


La franja horaria es GMT +2. Ahora son las 16:57:02.


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