아래와 같이 DB에서 읽은 자료를 Listview에 넣을려구 합니다. Ownerdata를 True로해서요..
그런데, 아래처럼하면 제일 마지막 자료만 Listview에 들어갑니다. 모두 Listview에 넣으려면 어떻게 해야되는지 고수님의 조언을 부탁드립니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, advlistv, Db, ZQuery, ZMySqlQuery, ZConnect,
ZMySqlCon, ZTransact, ZMySqlTr;
type
TForm1 = class(TForm)
ListView: TAdvListView;
Button1: TButton;
ZMySqlTransact1: TZMySqlTransact;
ZMySqlDatabase1: TZMySqlDatabase;
Query: TZMySqlQuery;
procedure Button1Click(Sender: TObject);
procedure ListViewData(Sender: TObject; Item: TListItem);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
Item: TListItem;
begin
Query.Open;
if Query.RecordCount > 0 then
Listview.Items.Count := Query.RecordCount;
end;
procedure TForm1.ListViewData(Sender: TObject; Item: TListItem);
begin
if Query.Active then
begin
while not Query.Eof do
begin
Item.Caption := Query.FieldByName('fserial').AsString;
Query.Next;
end;
end;
end;
end.
TListView를 OwnerData로 사용할때 리스트뷰에서 데이터를 필요로 할 때 OnData이벤트가 발생합니다. 이 이벤트는 한번만 발생하는게 아니라 각각의 데이터가 필요할 때마다 개별적으로 발생합니다. 즉, 리스트뷰에 있는 아이템 갯수가 10개라면 10번발생하는거죠... 이 사실을 간과하고 OnData이벤트에서 while문으로 아이템의 데이터를 설정하니까 맨 마지막의 값만 들어가는겁니다.
while문을 빼세요...
^^ 항상 즐코하세요...