Delphi - Recorrer Selección de un ListView

 
Vista:

Recorrer Selección de un ListView

Publicado por Irreal (69 intervenciones) el 10/11/2006 12:09:19
Necesito recorrer de una lista con multiselección los indices de la selección.

Dado que la lista puede contener varias lineas y la selección será considerablemente más pequeña quiero recorrer solo la seleción.

Según entiendo el bucle lo puedo montas de la siguiente manera.

For n:=0 to LstLista.SelCount - 1 do begin
end;

Con ello mi problema radica en saber el indice del registro en curso.

Luego en un proceso inverso he de hacer el mismo proceso en un Grid; pero en este caso no se siquiera como obtener el numero de registros seleccionados.

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Recorrer Selección de un ListView

Publicado por BigLuis (713 intervenciones) el 10/11/2006 12:41:37
var
Seleccionada:TListItem;
Indice:Integer;
begin
For n:=0 to LstLista.SelCount - 1 do
begin
Seleccionada:=LstLista.Items[n];
Indice:=Seleccionada.Index;
Indice:=LstLista.Items.IndexOf(Seleccionada);
end;

Echale un vistazo a las ayudas de Delphi a ver si encuentras algo sobre del DBGrid. Siempre esta mejor explicado y mas extenso de lo que lo podamos hacer nosotros y hay ayuda para casi todo.

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Recorrer Selección de un ListView

Publicado por Irreal (69 intervenciones) el 13/11/2006 12:02:41
No entiendo muy bien que hace estas lineas, además me da error. Permiteme intentar analizar el código ya que puede que mi interpretación sea erronea y por este motivo no soy capaz de ponerlo en marcha.

El bucle está claro que se recorre por cada linea selccionada.

Está linea me da error porque no puede asignar una cadena de caracteres a un TListItem; no obstante veo que se guarda el item correspondiente al contador de lineas, es decir en la primera pasada devuelve la primera linea, lo cual es un error porque puede no estar seleccionada. Necesito que en la primera pasada trate la primera linea seleccionada.

Seleccionada:=LstLista.Items[n];

En esta linea se guarda el numero de linea. No le veo el sentido pero tampoco ninguna desventaja.

Indice:=Seleccionada.Index;

La última linea da el mismo error que en la primera.Según deduzco en esta se recoge el item del numero de linea de la lista de item guarda previamente en la variable que habiamos asignado en la linea anterior, lo cual entiendo que pierde todo el sentido. Finalmente en esta última variable obtendría el item del numero de linea correspondiente al numero de pasada en el bucle.

Indice:=LstLista.Items.IndexOf(Seleccionada);

De esta forma o bien no he entendido el código( algo muy probable ) o realmente no recorrería las lineas seleccionadas y únicamente las seleccionadas de una lista.

Gracias por todo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Recorrer Selección de un ListView

Publicado por Irreal (69 intervenciones) el 13/11/2006 12:35:45
El gran error es mio por confundir un listView con un ListBox. Es realmente este último control el que quiero recorrer.

Siento el malentendido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Recorrer Selección de un ListView

Publicado por BigLuis (713 intervenciones) el 13/11/2006 14:18:05
No te preocupes. Tdos nos liamos. De todas formas lo que te puse no era la solucion de nada sino simplemente aportar ideas para que las desarrollaras.
-----------LISTBOX-----------------------------
for I:=0 to ListBox2.Items.Count-1 do
begin
if ListBox2.Selected[I] then
ListBox3.Items.Add(inttostr(I));
end;

Como empiezas con I:=0 y 0 es el indice del primer elemento, I ira tomando el indice de cada elemento seleccionado. Pero no emplees SelCount porque esto solo devuelve el numero de Items selecionados (por ejemplo 4) pero no recorre los cuatro seleccionados en el bucle sino los primeros cuatro.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Recorrer Selección de un ListView

Publicado por Irreal (69 intervenciones) el 15/11/2006 11:23:54
Me temo que está solución era que ya tenía implementada.

Lo pretendía evitar era tener que recorrerme toda la lista, y recorrer solo los seleccionados aunque empiezo a pensar que no se puede hacer.

En cuanto ha recoger los registros seleccionados en un grid no encuentro nada y también empiezo a pensar que no se puede selccionar sobre un grid.

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Recorrer Selección de un ListView

Publicado por BigLuis (713 intervenciones) el 15/11/2006 15:40:27
No entiendo porque no quieres recorrer toda la lista porque son milisegundos de diferencia pero cada uno es cada uno.
En cuanto a lo del TDBGrid si se peden seleccionar varias filas fijando la propiedad dgMultiSelect en Options. Por favor mira la ayuda antes de hacer la pregunta. Esto es coiar y pegar de la ayuda de Delphi
var
i, j: Integer;
s: string;
begin
if DBGrid1.SelectedRows.Count>0 then
with DBGrid1.DataSource.DataSet do
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
for j := 0 to FieldCount-1 do
begin

if (j>0) then s:=s+', ';
s:=s+Fields[j].AsString;
end;
//Aqui puedes hacer lo que quieras, yo lo he añadido a un ListBox
Listbox4.Items.Add(s);
s:= '';
end;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Recorrer Selección de un ListView

Publicado por bibian (10 intervenciones) el 08/05/2007 20:50:32
Mejor ahorrate esas 20 lineas con esta
ListBox1.MoveSelection(ListBox2);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar