소스코드리뷰(XXIV) ListView and Sorting

[목차(도우미)]
소스코드리뷰(XXIV) ListView and Sorting

  리스트뷰(ListView)의 컬럼 헤더를 클릭하면 항목을 재정렬(Sorting)할 수 있다.물론 정렬 기준은 여러가지가 있을 수 있으므로 일률적으로 사전식 정렬을 할 수는 없지만 약간의 트릭을 사용하면 Compare함수등을 써서 숫자 정렬도 가능하다.(Delphi, C/C++에 해당하는 방법)

할 수 있음에도 불구하고 세상에 있는 응용 프로그램이 모두 정렬 방식을 구현하고 있는 것이 아니다. 그 이유는 짐작컨대 공수(비용)적인 이유에서다. 리스트뷰의 갯수가 증가할 수록 구현해야할 소스코드량이 증가하기 때문에 할 수 있는 한 정렬을 생략하고 싶어한다.

정렬 전용 클래스를 작성한다

클래스 계승만이 객체지향이 아니고 --- Objective-C는 메소드를 카테고리 추가에 의한 방법으로 계승을 사용하지 않아도 편리한 방법이 있다고 한다 --- 정렬 전용 필드(Field, menber라고도 부른다)를 사용함으로 정렬을 간편히 할 수 있다.

소스코드예

편의상 델파이 소스를 예로 사용한다.

  1. TSortListView = class(TObject) //굳이 TListView를 계승할 필요도 없다.
  2.   private
  3.     FListView : TListView;
  4.     procedure ListView_HeaderClick();
  5.   public
  6.     constructor Create(AListView: TListView);override;
  7.   end;

  리스트뷰의 객체 인스턴스(AListView)를 넘겨 받아서 헤더클릭 이벤트만을 클래스 내에서 이벤트 프로시저(ListView_HeaderClick) 구현하면 된다. 리스트뷰의 정렬을 위해서는 TSortListView를 생성하는 것으로 충분하다.
by 금메달.아빠 on 2010. 9. 21. 23:09