Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   TListView:mostrar datos desde un bucle (https://www.clubdelphi.com/foros/showthread.php?t=52357)

Ziara 18-01-2008 13:41:17

TListView:mostrar datos desde un bucle
 
Hola, estoy probando sacar unos datos desde un bucle mediante el TListView, pero sólo he conseguido que se muestre la primera fila de datos, con esto:

Código:

TListItem * Itema;
Itema =  ListView1->Items->Add();
 //for(int i = 0; i<5; i++){
 Itema->Caption = "tema1";
 Itema->SubItems->Add("tema2");
//}

tal como está el código me muestra:

colum1 colum2 (esto es la cabecera)
tema1 tema2

pero, aun dejando el for sin comentar y suponiendo que asi debería sacarme cinco filas de datos tal como:

colum1 colum2 (esto es la cabecera)
tema1 tema2
... ...
tema1 tema2

NO lo hace, que estoy haciendo mal? :confused:

gracias

dec 18-01-2008 14:10:09

Hola,

Es curioso, porque, creo que el problema está en usar la misma variable. Creo que esta instrucción:

Código:

Itema =  ListView1->Items->Add();
... debería estar dentro del bucle. En Delphi podría usarse la magia del "width", que creo que no existe en C++ Builder:

Código Delphi [-]
for i := 0 to 5 do begin
  with ListView.Items.Add do begin
    Caption := 'Tema 1';
    SubItems.Add('Subtema 1');
  end;
end;

Aunque lo hago de memoria y puede que esté equivocándome, creo que por ahí van los tiros. ;)

Ziara 18-01-2008 15:17:18

Tienes razón, eso funciona, gracias!

y... entonces si quisiera sacar los datos en un TListView como antes pero los datos los genera un bucle for o while como se haría?

dec 18-01-2008 15:20:32

Hola,

Para "sacar" los datos del "TListView" (si entiendo bien) debes recorrer sus elementos o "items". Fíjate que la propiedad "Items" tiene a su vez una propiedad "Count". Se trata de recorrer los elementos, sabiendo que la cuenta empieza desde 0 hasta "Count -1".

Gabo 18-01-2008 18:24:09

Ejemplo de insertar datos en un TListView:

Código:


while (!DataModule->DataSource->DataSet->Eof)
{
      TListItem* lista= lvSalas->Items->Add();
      lista->Caption=DataModule->DataSource->DataSet->FieldByName("CLIENTE_CODIGO")->AsString;
      lista->SubItems->Add(DataModule->DataSource->DataSet->FieldByName("CLIENTE_NOMBRE")->AsString);
      DataModule->DataSource->DataSet->Next();
}


Ejemplo de recorrer un TListView:

Código:


for (int i=0; i < ListView1->Items->Count; i++)
{
    ...=ListView1->Items->Item[i]->Caption;
    ...=ListView1->Items->Item[i]->SubItems [0][0];
}


Ziara 22-01-2008 14:15:33

Hola otra vez, he estado mirando los códigos y en:

Código:

while (!DataModule->DataSource->DataSet->Eof)
{
      TListItem* lista= lvSalas->Items->Add();
      lista->Caption=DataModule->DataSource->DataSet->FieldByName("CLIENTE_CODIGO")->AsString;
      lista->SubItems->Add(DataModule->DataSource->DataSet->FieldByName("CLIENTE_NOMBRE")->AsString);
      DataModule->DataSource->DataSet->Next();
}

creo que

!DataModule->DataSource->DataSet

será como un archivo donde contiene los datos y mediante TListView los vas mostrando en pantalla.

Pero yo querría cómo mostrar datos en un TListView de un bucle for que va generando unos datos, pongo un ejemplo:
tengo en un Unit2.h

Código:

class Recorrer
{
 private:
          String cadena;
 public:
          void FuncionRec();
          String DevCadena(void){return cadena;}
}

tengo un un Unit2.cpp

Código:

void Recorrer::FuncionRec()
{
    int i;
    for(i=0; i<5; i++)
    {
      cadena = "hola mundo";
      cadena2="adios mundo";
    }
}

Y ahora en el Form1 del Unit1 agrego el componente TListView y en Unit.cpp:

Código:

Recorrer *re = new Recorrer();
re->FuncionRec();  //llamo a la funcion que contiene el for

TListItem *Itema;
Itema = ListView1->Items->Add();
Itema->Caption = re->DevCadena();
Itema->SubItems->Add(re->DevCadena2());

delete re;

Pero con lo anterior sólo me muestra el contenido del for una vez, ¿cómo se podría hacer que se mostrase las veces indicadas en la variable i? Porque la propiedad Count de Items es para cuando recorres un TListView, pero si inicialmente no tengo nada :confused:

Ziara 23-01-2008 13:59:17

El fallo está en que:

Código:

class Recorrer
{
 private:
          String cadena;
 public:
          void FuncionRec();
          String DevCadena(void){return cadena;}
}

se va machacando las variables cadena y cadena 2 por lo cual cuando en el Unit1 se llama a:

Código:

Recorrer *re = new Recorrer();
re->FuncionRec();  //llamo a la funcion que contiene el for

TListItem *Itema;
Itema = ListView1->Items->Add();
Itema->Caption = re->DevCadena();
Itema->SubItems->Add(re->DevCadena2());

delete re;

únicamente muestra la última iteración en el ListView.

Hay alguna forma en un for de preservar los mismas variables sin que se machaquen y así poder mostrarla en el ListView, o si no... alguna alternativa?


La franja horaria es GMT +2. Ahora son las 06:05:49.

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