var
nColumnToSort: Integer;
bAssending : boolean;
Tlistview 의 OnColumnClick 이벤트에 아래와 같이 코딩합니다.
procedure TForm1.lvMainColumnClick(Sender: TObject; Column: TListColumn);
begin
bAssending := not bAssending;
nColumnToSort := Column.Index;
(Sender as TCustomlistview).AlphaSort;
end;
Tlistview 의 OnCompare 이벤트에 아래와 같이 코딩합니다.
procedure TForm1.lvMainCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var
strOne, strTwo: string;
begin
if nColumnToSort = 0 then
Compare := CompareText(Item1.Caption, Item2.Caption)
else
begin
if (nColumnToSort - 1) < Item1.SubItems.Count then
strOne := Item1.SubItems[nColumnToSort - 1]
else
strOne := '';
if (nColumnToSort - 1) < Item2.SubItems.Count then
strTwo := Item2.SubItems[nColumnToSort - 1]
else
strTwo := '';
if bAssending then // Assending Sort
Compare := CompareText(strOne, strTwo)
else
Compare := CompareText(strTwo, strOne);
end;
end;
위의 것처럼 했는데 팁 자료실에 있는걸 보고 했는데.
subitem 컬럼은 소트가 되는게 Caption 는소트가 안되네요
알려주세요..
Caption 로 컬럼헤더 클릭하면 정렬이 되야 하는데 한번만 되요.
subitem는 한번 눌루면 asc 또 눌르면 desc 이런 비슷한 형식으로 되는데.
caption asc 만 되는거 같아요 알려주세요~~~
Caption도 SubItem처럼 bAssending에 따라서 비교를 달리하시면 됩니다.
<!--CodeS-->
if nColumnToSort = 0 then
begin
if bAssending then // Assending Sort
Compare := CompareText(Item1.Caption, Item2.Caption)
else
Compare := CompareText(Item2.Caption, Item1.Caption);
end
else
<!--CodeE-->
^^ 항상 즐코하세요...