Ver Mensaje Individual
  #5  
Antiguo 07-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por mightydragonlor
alguien conoce un método mejor para la carga de estos datos?
Sí, yo

En tu caso particular yo usaría el ListView en modo virtual. En este modo, el ListView no carga todos los datos sino sólo los que se requiere mostrar en un momento dado.

Los pasos para ello son muy sencillos:
  1. Pones la propiedad OwnerData del ListView en true.

  2. Al momento de leer los datos, en lugar de cargar los elementos del ListView como hasta ahora, simplemente le indicas cuántos elementos hay:

    Código Delphi [-]
    ListView.Items.Count := DataSet.RecordCount;
  3. Los elementos en sí, los cargas en el evento OnData del ListView

    Código Delphi [-]
    DataSet.RecNo := Item.Index; // Item es el parámetro del evento
    Item.Caption := DataSet.FieldByName(...).AsString;
    Item.SubItems(0) := DataSet.FieldByName(...).AsString;
    Item.SubItems(1) := DataSet.FieldByName(...).AsString;
    
    ...

Aquí DataSet es el data set que estés usando, query, table, etc. Eso sí, es necesario que este data set pueda recorrerse aleatoriamente (que estén implementadas las propiedades RecordCount y RecNo). De no ser así, puedes factorizar por un ClientDataSet:

Código:
TuDataSet -> DataSetProvider -> ClientDataSet -> ListView
// Saludos
Responder Con Cita