PDA

Ver la Versión Completa : Agregar datos a Listview


ZayDun
12-09-2013, 20:15:01
Hola, tengo un listview con 3 columnas [Usuario] - [Puntos] - [Fecha], el problema es que los datos no los recibo a la misma vez para utilizar este metodo..


with ListView1.Items.Add do
Begin
SubItems.Add(Usuarios));
SubItems.Add(Puntos));
SubItems.Add(Fechas ));


Primero muestro la lista de usuarios y cuando quiero cargar los puntos no se como indicarle que los cargue en el SubItems "[Puntos]" ¿Alguna idea?

dec
12-09-2013, 20:31:23
Hola,

Puedes acceder a los "SubItems" de los elementos en cualquier momento. Tendrías que escribir algo parecido a esto:


ListView1.Items[ index ].SubItems[ subIndex ] := 'Nuevo valor';


Donde "index" es el índice del elemento al que quieres acceder, y "subIndex" el del "subitem" al que quieres acceder. Nota que "ListView" tiene algunos método útiles como "HasSubItems" y otros que no recuerdo ahora. ;)

ZayDun
12-09-2013, 21:04:25
Gracias por la ayuda, al ejecutar el siguiente código


If Pos ('@Puntos',XPuntos)>0 Then
Begin
Delete (XPuntos,1,Pos(' ',XPuntos));
ListView1.Items[1].SubItems[2] := XPuntos;
End;


@Puntos es el inicio de la cadena que contiene los puntos
XPuntos contiene la lista completa de puntos, Ejemplo:

@Puntos 15
@Puntos 42
@Puntos 53
...

Al ejecutar me aparece un Access Violation, aun no se muy bien el motivo, seguiré buscando donde esta el problema.

dec
12-09-2013, 21:20:37
Hola,

No debería haber problema si accedes a elementos y subelementos realmente existentes. Recuerda que los índices comienzan en "cero". Tal vez lo que ocurra es que tu lista tiene dos subelementos, de manera que para acceder al segundo de ellos debes escribir: "SubItems[ 1 ]", y no "SubItems[ 2 ]", que no existiría, y, de ahí el "Access violation".

nlsgarcia
12-09-2013, 21:40:46
ZayDun,


...tengo un listview con 3 columnas [Usuario] - [Puntos] - [Fecha]...muestro la lista de usuarios y cuando quiero cargar los puntos no se como indicarle que los cargue en el SubItems "[Puntos]"...

Revisa este código:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;

type
TForm1 = class(TForm)
ListView1: TListView;
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

ListView1.ViewStyle := vsReport;

ListView1.Columns.add;
ListView1.Columns[0].caption := '';
ListView1.Columns[0].Width := 0;

ListView1.Columns.add;
ListView1.Columns[1].caption := 'Usuarios';
ListView1.Columns[1].Width := 200;

ListView1.Columns.add;
ListView1.Columns[2].caption := 'Puntos';
ListView1.Columns[2].Width := 200;

ListView1.Columns.add;
ListView1.Columns[3].caption := 'Fechas';
ListView1.Columns[3].Width := 200;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin

ListView1.Clear;
for i := 1 to 10 do
with ListView1.Items.Add do
begin
Subitems.Add('Usuario-' + IntToStr(i));
Subitems.Add('');
Subitems.Add('');
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer;

begin

for i := 0 to ListView1.Items.Count - 1 do
with ListView1.Itemsdo
begin
Subitems.Strings[1] := 'Punto-' + IntToStr(i+1);
Subitems.Strings[2] := 'Fecha-' + IntToStr(i+1) + ' ' + DateToStr(Now);
end;

end;

end.

El código anterior crea tres columnas en un componente TListView, [I]cargando primero los datos de la columna 1 (Usuarios) y luego los datos de las columnas 2 y 3 (Puntos y Fechas).

Espero sea útil :)

Nelson.

dec
12-09-2013, 22:28:36
Hola,

Recordemos que "tres columnas" no significan aquí "tres subitems". La primera columna se establece con la propiedad "Caption" de los "Items", mientras que las dos siguientes columnas sí son ya "SubItems". Creo que de ahí se deriva el error: en la lista no hay tres "subitems" y como los índices comienzan en cero, no puede accederse al subitem 2 porque este no existe: la columna 3, o sea el subitem 2, tiene el índice 1.

No sé si me explico. :D :D :D

ecfisa
12-09-2013, 22:39:48
Hola,

Recordemos que "tres columnas" no significan aquí "tres subitems". La primera columna se establece con la propiedad "Caption" de los "Items", mientras que las dos siguientes columnas sí son ya "SubItems". Creo que de ahí se deriva el error: en la lista no hay tres "subitems" y como los índices comienzan en cero, no puede accederse al subitem 2 porque este no existe: la columna 3, o sea el subitem 2, tiene el índice 1.

No sé si me explico. :D :D :D
Hola dec.

Me quitaste las palabras de la boca... :)

Justamente estaba por decir que la asignación debería ser:

...
for i := 1 to n do
with ListView1.Items.Add do
begin
Caption := '';
Subitems.Add('');
Subitems.Add('');
end;
...

De otro modo los valores de "usuario" quedarían en la columan "puntos" .

Saludos :)

nlsgarcia
13-09-2013, 01:00:12
ZayDun,

Continuación del Msg #5:


El código anterior crea tres columnas en un componente TListView, cargando primero los datos de la columna 1 (Usuarios) y luego los datos de las columnas 2 y 3 (Puntos y Fechas).


Lo cual se puede expresar con más detalle en función de lo comentado en los Msgs #6 y #7:

El código anterior crea cuatro columnas en un componente TListView, cargando primero los datos de la Columna-1,Subitems-0 (Usuarios) y luego los datos de la Columna-2,Subitems-1 (Puntos) y Columna-3,Subitems-2 (Fechas), la Columna 0 no se utiliza en este ejemplo.

Nota: La Columna 0 se utiliza en un componente TListView para establecer el nombre de la fila (Propiedad Caption) y/o una imagen de la fila (Propiedades LargeImages, StateImages y SmallImages asociadas a un componente ImageList), como se muestra a continuación:

http://img43.imageshack.us/img43/4815/kp78.jpg

Revisa estos links:

Mostrando información en un ListView (I) : http://delphiallimite.blogspot.com/2007/09/mostrando-informacin-en-un-listview-i.html

Mostrando información en un ListView (II) : http://delphiallimite.blogspot.com/2007/09/mostrando-informacin-en-un-listview-ii.html

Mostrando información en un ListView (y III) : http://delphiallimite.blogspot.com/2007/09/mostrando-informacin-en-un-listview-y.html

Espero sea útil :)

Nelson.