|
애초에 뿌려줄때에 정렬하는것은 저두 잘은 모르구요..
컬럼을 클릭했을때 정렬하는 소스를 싥습니다.
우선 ListView의 event속성중에 OnColumnClick이벤트에 아래의 소스와 같이 작성해 주세요.
아래는 정렬하는 알고리즘에 몇번째 컬럼을 기준으로 정렬할지를 알려주는 겁니다.
int SortByColumn = -1;
int SortOrder = 1;
void __fastcall TIproveImportDesign::ClockDomainListViewColumnClick(TObject *Sender, TListColumn *Column)
{
if(SortByColumn == Column->Index) {
SortOrder *= -1;
} else {
SortOrder = 1;
}
ClockDomainListView->CustomSort(NULL, Column->Index);
SortByColumn = Column->Index;
}
다음은 OnCompare이벤트에 아래의 소스와 같이 작성해 주세요.
아래는 정렬 알고리즘을 기술하는 부분입니다.
void __fastcall TIproveImportDesign::ClockDomainListViewCompare(
TObject *Sender, TListItem *Item1, TListItem *Item2, int Data, int &Compare)
{
if(Data == 0) {
if(Item1->Caption < Item2->Caption) {
Compare = -1;
} else if(Item1->Caption > Item2->Caption) {
Compare = 1;
} else {
Compare = 0;
}
} else {
if(Item1->SubItems->Strings[Data-1] < Item2->SubItems->Strings[Data-1]) {
Compare = -1;
} else if(Item1->SubItems->Strings[Data-1] > Item2->SubItems->Strings[Data-1]) {
Compare = 1;
} else {
Compare = 0;
}
}
Compare *= SortOrder;
}
그럼.. 이정도면 컬럼을 클릭했을때 정렬은 하실수 있습니다.
그런데 저두 정말 궁금한데.. 데이타를 출력하면서 정렬은 못하는 겁니까?
아시는분은 답변좀 부탁드립니다.
백상열 님이 쓰신 글 :
: 출력된 ListView1에서 내용으로 Sort를 시키고싶습니다. 그래서,
:
: TListItem *NewItem;
: 이렇게하구요,
:
: NewItem->Caption=tel; // 전화
: NewItem->SubItems->Add(name); // 이름
: item은 각각 이렇게 넣었는데,
:
: 전화가 아니라
: 이름(즉, ListView1->Items->Item[i]->SubItems->String[0])으로
: Sort하려고하는데, 가능한가요 ?
:
: Help를 보니깐
:
: ListView1->SortType=stData;
: ListView1->AlphaSort();
: 이렇게 하면된다건지,, 답답해서 이렇게 직접해봐도 잘 안되는데..
: 제가 사용을 잘못한건지, 아니면 ListView에서는 Sort를 지원하지않은겐지
: 궁금합니다.
:
: 혹시, 구체적으로 아시는분있으시면 답변주시면 고맙겠습니다. 꾸벅~
: ViewStyle에서 vsReport하고, 각 칼럼을 클릭하면 Sort되어도 좋습니다.
|