编号ListView

时间:2012-02-05 17:19:19

标签: delphi listview enumeration lazarus

如何在ListView(vsReport)中对项目进行编号?现在我有类似的东西:

Item := ListView1.Items.Add;
Item.Caption :=inttostr(Item.Index+1); 

但它仅在项目未排序时有效。如果我把一切都搞定了。

3 个答案:

答案 0 :(得分:5)

每当列表排序时,您需要循环遍历项目并更新标题。

for i := 0 to ListView1.Items.Count-1 do
  ListView1.Items[i].Caption := IntToStr(i+1);

我个人会切换到在虚拟模式下使用列表视图,这使得添加索引列变得微不足道。正如您目前所拥有的那样,您需要努力使列表的内容与基础数据保持同步。使用虚拟列表视图解决了问题。

答案 1 :(得分:3)

尝试将编号逻辑移动到一个过程,并在对listview进行排序后调用此方法。

试试这个样本

procedure SetNumbering(ListView : TListView);
var
 i : integer;
begin
 ListView.Items.BeginUpdate;
 try
   for i := 0 to ListView.Items.Count-1 do
     ListView.Items.Item[i].Caption:=IntToStr(i+1);
 finally
  ListView.Items.EndUpdate;
 end;
end;

答案 2 :(得分:0)

我会采取更像是做一些自定义绘图的方法。大约1/4的时间我使用列表控件,我最终使用其自定义绘图功能来适应这样的事情。请参阅This Article,其中详细介绍了如何完成自定义绘图。您可以在绘制项目时检查项目的索引,并在每个项目的左侧绘制您的编号。如果你愿意的话,我可以把一个样本放在一起,但这是一个很好的编码。但是你不仅可以完成你想要的编号,还可以做很多其他的事情,比如实现自己的风格,绘制图像,绘制其他控件等等。