Dynamiczne dodawanie danych do ListView

0

Witam
Mam pewien formularz. Na nim 5 editów. Pierwsze 2 edity zawierają nazwę itemu i subitemu (2 kolumny) do listview (vsReport). Pozostałe 3 edity chciałbym, aby zawierały się w tym dodanym itemie (pozycji), jednak aby nie były one widoczne. Później po kliknięciu dwa razy na ten dodany item - chciałbym wyświetlić te dane, które dodałem w tych pozostałych 3 editach. Wszystko było by ok, gdybym dodał jedną pozycję do ListView :). Wtedy przypisuję sobie do zmiennych. Ale co, jeśli dodam 1000 pozycji? Przypuszczam, że muszę dodać do tablicy, ale w jaki sposób? A może jakiś inny pomysł?

0

Jeżeli dobrze zrozumiałem chodzi o coś takiego, zamiast obiektu właściwie mógłby być rekord ale wolę tak:

unit Unit1;

interface

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

type
  TMyObject = class
  private
    fField1: string;
    fField2: string;
    fField3: string;
  public
    property Field1: string read fField1 write fField1;
    property Field2: string read fField2 write fField2;
    property Field3: string read fField3 write fField3;
  end;

  TForm1 = class(TForm)
    btnAdd: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    ListView1: TListView;
    Button1: TButton;
    procedure btnAddClick(Sender: TObject);
    procedure ListView1Deletion(Sender: TObject; Item: TListItem);
    procedure ListView1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnAddClick(Sender: TObject);
var
  Item: TListItem;
begin
  Item:= ListView1.Items.Add;
  Item.Caption:= Edit1.Text;
  Item.SubItems.Add(Edit2.Text);
  Item.Data:= TMyObject.Create;
  TMyObject(Item.Data).Field1:=  Edit3.Text;
  TMyObject(Item.Data).Field2:=  Edit4.Text;
  TMyObject(Item.Data).Field3:=  Edit5.Text;
end;

procedure TForm1.ListView1Deletion(Sender: TObject; Item: TListItem);
begin
  TMyObject(Item.Data).Free; //zwalnianie dziala przy Delete, Clear i niszczeniu ListView
end;

procedure TForm1.ListView1Click(Sender: TObject);
begin
  if (ListView1.SelCount = 1) then
  begin
    Edit3.Text:= TMyObject(ListView1.Selected.Data).Field1;
    Edit4.Text:= TMyObject(ListView1.Selected.Data).Field2;
    Edit5.Text:= TMyObject(ListView1.Selected.Data).Field3;
  end;
end;

end.
0

Ogromne dzięki! O to mi właśnie chodziło :) Dzięki!
Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1