如何在ListView(vsReport)中对项目进行编号?现在我有类似的东西:
Item := ListView1.Items.Add;
Item.Caption :=inttostr(Item.Index+1);
但它仅在项目未排序时有效。如果我把一切都搞定了。
答案 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,其中详细介绍了如何完成自定义绘图。您可以在绘制项目时检查项目的索引,并在每个项目的左侧绘制您的编号。如果你愿意的话,我可以把一个样本放在一起,但这是一个很好的编码。但是你不仅可以完成你想要的编号,还可以做很多其他的事情,比如实现自己的风格,绘制图像,绘制其他控件等等。