Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Agregar datos a Listview (https://www.clubdelphi.com/foros/showthread.php?t=84129)

ZayDun 12-09-2013 20:15:01

Agregar datos a Listview
 
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..

Código Delphi [-]
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:

Código Delphi [-]
 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

Código Delphi [-]
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,

Cita:

Empezado por 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:
Código Delphi [-]
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.Items[i]do
      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, 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

Cita:

Empezado por dec (Mensaje 466819)
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:
Código Delphi [-]
...
  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:

Cita:

Empezado por nlsgarcia (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:
Cita:

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:



Revisa estos links:
Cita:

Mostrando información en un ListView (I) : http://delphiallimite.blogspot.com/2...istview-i.html

Mostrando información en un ListView (II) : http://delphiallimite.blogspot.com/2...stview-ii.html

Mostrando información en un ListView (y III) : http://delphiallimite.blogspot.com/2...istview-y.html
Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 17:56:03.

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