Ver Mensaje Individual
  #9  
Antiguo 19-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Daniel.
Cita:
Empezado por danielmj Ver Mensaje
...
Ya no es tanto por el proyecto en si, sino por comprender como funciona este maldito control.
Un saludo.
Perdón por demorar en responder , pero estos días ando medio complicado...

Código Delphi [-]
 for j:= 0 to LV1.Items.Count-1 do  //cuenta los elementos de la lista NO las columnas ¿correcto?
  begin
    for i:= 0 to LV1.Columns.Count-2 do  //cuenta las columnas ¿correcto?
Es correcto.

Cita:
... Así que en este punto no sé muy bien si abandonar la idea de las listas y usar las bases de datos o seguir insistiendo.
Si preguntas mi opinión, usaría base de datos sin dudarlo.

Cita:
aunque eso me deja cierto regusto a derrota por no haberlo podido hacer con listview.
Intentaremos que eso no suceda

Los problemas que encuentras pueden deberse a si consideras el item como un elemento más o no. Para el ejemplo almaceno los elementos en los subitems descartando los ítems:
Código:
[-]-+ 
    |
    + Valor 1
    |
    + Valor 2
    |
    + ...
    |
    + Valor N
Según entendí, no buscabas encolumnarlos uno debajo del otro sino aparejarlos, entonces podrías hacer:
(Espero que el código comentado te clarifique las acciones)
Código Delphi [-]
procedure JoinListViews(LV1,LV2,LV3: TListView);
var
  c,r: Integer;
  li: TListItem;
begin
  // Crear las columnas necesarias en LV3 para contener LV1 y LV2 
  for r:= 0 to LV1.Columns.Count + LV2.Columns.Count - 2 do
  begin
    LV3.Columns.Add;
    if r = 0 then
      LV3.Column[r].Width:= 0 // No utilizo la columna 0
    else
      LV3.Column[r].Width:= 100;
  end;
  // Copiar los títulos
  for r:= 0 to LV1.Columns.Count-1 do
    LV3.Column[r].Caption:= LV1.Column[r].Caption;
  for r:= 1 to LV2.Columns.Count-1 do
    LV3.Column[-1+LV1.Columns.Count+r].Caption:= LV2.Column[r].Caption;

  // Agregar los items
  for r:= 0 to LV1.Items.Count+LV2.Items.Count-4 do
  begin
    // Crear una fila
    li:= LV3.Items.Add;
    // Copiar los items de LV1 como subitems
    for c:= 0 to LV1.Columns.Count-2 do
      li.SubItems.Add(LV1.Items[r].SubItems[c]);
    // Copiar los items de LV2 como subitems
    for c:= 0 to LV2.Columns.Count-2 do
      li.SubItems.Add(LV2.Items[r].SubItems[c]);
  end;
end;

procedure TForm1.btnJoinClick(Sender: TObject);
begin
  JoinListViews(ListView1, ListView2, ListView3);
end;

Con este resultado, que creo, es el que buscas:



Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita