소스코드리뷰(XXIV) ListView and Sorting
[목차(도우미)]
소스코드리뷰(XXIV) ListView and Sorting
리스트뷰(ListView)의 컬럼 헤더를 클릭하면 항목을 재정렬(Sorting)할 수 있다.물론 정렬 기준은 여러가지가 있을 수 있으므로 일률적으로 사전식 정렬을 할 수는 없지만 약간의 트릭을 사용하면 Compare함수등을 써서 숫자 정렬도 가능하다.(Delphi, C/C++에 해당하는 방법)
할 수 있음에도 불구하고 세상에 있는 응용 프로그램이 모두 정렬 방식을 구현하고 있는 것이 아니다. 그 이유는 짐작컨대 공수(비용)적인 이유에서다. 리스트뷰의 갯수가 증가할 수록 구현해야할 소스코드량이 증가하기 때문에 할 수 있는 한 정렬을 생략하고 싶어한다.
리스트뷰의 객체 인스턴스(AListView)를 넘겨 받아서 헤더클릭 이벤트만을 클래스 내에서 이벤트 프로시저(ListView_HeaderClick) 구현하면 된다. 리스트뷰의 정렬을 위해서는 TSortListView를 생성하는 것으로 충분하다.
리스트뷰(ListView)의 컬럼 헤더를 클릭하면 항목을 재정렬(Sorting)할 수 있다.물론 정렬 기준은 여러가지가 있을 수 있으므로 일률적으로 사전식 정렬을 할 수는 없지만 약간의 트릭을 사용하면 Compare함수등을 써서 숫자 정렬도 가능하다.(Delphi, C/C++에 해당하는 방법)
할 수 있음에도 불구하고 세상에 있는 응용 프로그램이 모두 정렬 방식을 구현하고 있는 것이 아니다. 그 이유는 짐작컨대 공수(비용)적인 이유에서다. 리스트뷰의 갯수가 증가할 수록 구현해야할 소스코드량이 증가하기 때문에 할 수 있는 한 정렬을 생략하고 싶어한다.
정렬 전용 클래스를 작성한다
클래스 계승만이 객체지향이 아니고 --- Objective-C는 메소드를 카테고리 추가에 의한 방법으로 계승을 사용하지 않아도 편리한 방법이 있다고 한다 --- 정렬 전용 필드(Field, menber라고도 부른다)를 사용함으로 정렬을 간편히 할 수 있다.소스코드예
편의상 델파이 소스를 예로 사용한다.- TSortListView = class(TObject) //굳이 TListView를 계승할 필요도 없다.
- private
- FListView : TListView;
- procedure ListView_HeaderClick();
- public
- constructor Create(AListView: TListView);override;
- end;
리스트뷰의 객체 인스턴스(AListView)를 넘겨 받아서 헤더클릭 이벤트만을 클래스 내에서 이벤트 프로시저(ListView_HeaderClick) 구현하면 된다. 리스트뷰의 정렬을 위해서는 TSortListView를 생성하는 것으로 충분하다.
'연구개발 이야기' 카테고리의 다른 글
xcode-IBOutlet/IBAction을 연결하는 방법 (0) | 2010.10.18 |
---|---|
소스코드리뷰(XXV) 재활용 가능한 검색 폼을 만들자 (0) | 2010.09.21 |
소스코드리뷰(XXIII) Radio Button and Treeview (0) | 2010.09.19 |
소스코드리뷰(XXII) CheckBox and Listview (0) | 2010.09.19 |