Содержание материала

 

Сортировка ListView в режиме vsReport при нажатии на заголовок колонки

 

Code:

function CustomDateSortProc(Item1, Item2: TListItem; ParamSort: integer): integer; stdcall;

 

begin

result:=0;

if strtodatetime(item1.SubItems[0])> strtodatetime(item2.SubItems[0]) then

Result :=1

else

if strtodatetime(item1.SubItems[0])< strtodatetime(item2.SubItems[0]) then

   Result :=-1;

end;

 

procedure TForm1.lv1ColumnClick(Sender: TObject; Column: TListColumn);

begin

if column =lv1.columns[0] then

LV1.CustomSort(@CustomNameSortProc, 0)

else

LV1.CustomSort(@CustomDateSortProc, 0)

end;

 

Сортировка по первой колонке

Сортировка по первой колонке TListView делается так:

 

Code:

ListView1.SortType := stText;

  

Установка SortType в stText аналогична установке Sorted в True в объекте TListBox. Список будет оставаться отсортированным даже после добавления или изменения элементов, до тех пор, пока не установить SortType обратно в stNone:

Code:

ListView1.SortType := stNone;

  

В TListBox это аналогично установке Sorted в False.

 

Сортировка по другим колонкам

Чтобы отсортировать TListView по другой колонке, потребуется написать событие OnCompare, либо функцию сортировки, которая будет использоваться в методе CustomSort.

 

Для начала рассмотрим сортировку при помощи события OnCompare.

Code:

procedure(Sender: TObject; Item1, Item2: TListItem;Data: Integer; var Compare: Integer) of object;

 

 Параметр Compare может иметь три значения: 1, -1 или 0. Единица означает, что первый элемент больше (или должен быть размещён после) второго элемента. Минус одни означает, что первый элемент меньше чем (или должен быть размещён перед) второй элемент. Ноль означает, что два элемента равны.

 

В следующем примере мы сортируем TListView по четвёртой колонке (которая представлена целыми значениями) в порядке убывания:

Code:

procedure TForm1.ListView1Compare(Sender: TObject; Item1,

Item2: TListItem; Data: Integer; var Compare: Integer);

var

n1, n2: integer;

begin

n1 := StrToInt(Item1.SubItems[2]);

n2 := StrToInt(Item2.SubItems[2]);

if n1 > n2 then

   Compare := -1

else if n1 < n2 then

   Compare := 1

else

   Compare := 0;

end;

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить