动态ListView的OnDataEvent...(180分)

  • 主题发起人 主题发起人 tmcco
  • 开始时间 开始时间
T

tmcco

Unregistered / Unconfirmed
GUEST, unregistred user!
我创建了一个ListView数组,十个子项:
ListViewArray: array of TListView;
并将子项的Ondata设为true,以便增快速度,但问题是:

procedure buttonclick(sender:tobject);
var i,j:integer;
begin
for i:= 0 to 9 do // 十项
for j:= 0 to 99 do // 100个TListItem
ListItem:= ListViewArray.Items.Add;
end;

procedure TListView1.OnDataEvent(Sender: TObject; Item: TListItem);
begin
Item.Caption:= xxx; // xxx是我想添加的数据,下同
Item.SubItems.Add(xxx);
Item.SubItems.Add(xxx);
Item.SubItems.Add(xxx);
Item.SubItems.Add(xxx);
end;
增加完十项后,发现0-8项的内容和第9项相同,如何能使其每个ListView数据正常?
谢谢!
 
刚好我这几天用它,我的listview有七列。我是这样添加内容的:

ListItem := testjp.ListView1.Items.Add;
ListItem.Caption := inttostr(testjp.ListView1.Items.Count); //第一列
i:=testjp.ListView1.Items.Count-1;
with testjp.ListView1.Items do
begin
SubItems.Append(edit4.Text); //第2列
SubItems.Append(edit5.Text); //第3列
SubItems.Append(edit6.Text); //第4列
SubItems.Append(combobox3.Text); //第5列
SubItems.Append(combobox1.Text); //第6列
SubItems.Append(combobox2.Text); //第7列
end;

是这个意思?
 
不是,我动态创见了10个listview,再动态添加items,但是将listview的ondata设为
true时(见上),前9个listview的内容(items)和第十个相同,就是这个问题。
 
不懂了:)
listview的OnDataEvent在那里?我怎么没找到
 
将listview的ondata设为true,就可自己管理4个‘ondata’事件
 
根据delphi的描述,应该是实现不了你的功能。
ondata事件:
Occurs immediately before an item is displayed in the list view control.
 
OnData 不是这样用的
是为了虚拟数据方式用的, ListView 不帮你保存 Item 数据,当它需要重画
Item 的时候会在 OnData 事件通知你重画哪一个 Item,见这个 Item 的 Index 属性!
然后在事件里你动态提供数据!需要你自己保存数据.
另外 虚拟方式你可以不必用 ListView 的 Add 方法增加 Item
直接把 ListView 的 count 设成你要的大小就行乐
 
把listview的count设为我想要的,那listview中的数据呢?
可否再详细些?谢谢!
 
你首先必须理解"虚拟数据"方式的含义,在虚拟数据方式中 ListView 中的数据是你在 OnData 事件中动态提供给 ListView 的
你必须自己保存数据,你必须自己知道第 i 项内容该是什么,比如你另外有一 StringList,
ListView 的 Count 和 StringList 相等, StringList 的第 i 项就是你要显示在
ListView 的 i 项的 Item.Caption,那么你开始只需要告诉 ListView.count := StringList.count,
不必把数据给它,在 OnData 事件里你再 Item.caption := StringList[Item.index], 这样动态给它。
所谓“动态”就是 ListView 在它认为必要的时候(重画,刷新)触发 OnData 事件。
如果你想进一步了解“虚拟数据”的 ListView,那么看看 Delphi 目录下
Demos/Virtual Listview/virtuallistview.dpr 这个例子,你会更加清楚的!:)
 
问题已经解决,谢谢大家!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
851
DelphiTeacher的专栏
D
后退
顶部