Нумерация ListView - PullRequest
       14

Нумерация ListView

1 голос
/ 05 февраля 2012

Как мне нумеровать элементы в ListView (vsReport)? Теперь у меня что-то подобное:

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

, но работает, только если элементы не отсортированы. Если я сортирую все смешивается.

Ответы [ 3 ]

5 голосов
/ 05 февраля 2012

Всякий раз, когда список сортируется, вам нужно перебирать элементы и обновлять заголовок.

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

Лично я бы переключился на использование списка в виртуальном режиме, что делает добавление столбца индекса тривиальным. Поскольку у вас это есть в настоящее время, вам нужно усердно работать, чтобы синхронизировать содержимое списка с основными данными. При виртуальном представлении списка эта проблема исчезает.

3 голосов
/ 05 февраля 2012

Попробуйте переместить логику нумерации в процедуру и вызовите этот метод после сортировки списка.

Попробуйте этот пример

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;
0 голосов
/ 07 февраля 2012

Я бы выбрал подход, похожий на рисование.Примерно в 1/4 времени, когда я когда-либо использовал элементы управления списком, я использую его собственные возможности рисования, чтобы приспособиться к таким вещам.См. Эта статья , в которой подробно рассматриваются способы выполнения пользовательского чертежа.Вы можете проверить индекс элемента по мере его отрисовки и нарисовать свой номер слева от каждого элемента.Я могу собрать образец, если хотите, но это довольно сложная задача.Но вы не только выполняете нумерацию, которую вы хотите, но вы также можете делать много других вещей, таких как реализация собственных стилей, рисование изображений, рисование других элементов управления и т. Д.

...