Q&A

  • ListView sort 에서 질문
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 만 되는거 같아요 알려주세요~~~

1  COMMENTS
  • Profile
    최용일 2006.09.18 22:22
    안녕하세요. 최용일입니다.

    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-->

    ^^ 항상 즐코하세요...