Q&A

  • 콤보박스에서 아이템 정렬하는 법 가르쳐주세요
이런 형식으로 콤보박스에서 아이템을 DB에서 받아서 보여주고 있습니다.
ComBox.Items.Add(Format('%-17s%4s',[recSSDesc.szName,recSSDesc.szId]));

그런데 아이템인덱스에서 정렬이 앞쪽의 이름으로 정렬이되서 표시가 됩니다
이것을 뒷쪽의 아이디로 정렬을 하고 싶은데 이걸 어떻게 해야하나요?

콤보박스는 FlatComboBox를 사용하고 있습니다.

현재 콤보박스를 누르게 되면 이렇게 나옵니다
김길동         200
이길동         150
홍길동         300

이것을 이렇게 뒷쪽의 아이디로 정렬하여 표현하고 싶습니다.
이길동         150
김길동         200
홍길동         300

도와주세요.
7  COMMENTS
  • Profile
    최용일 2009.04.22 20:28
    콤보박스에 아이템을 넣기 전에 먼저 뒤쪽의 아이디(recSSDesc.szId)로 정렬을 한고난 뒤에 삽입하시면 됩니다.
    소팅알고리즘은 자료구조 책이나 웹에서 검색하시면 잘 나올겁니다.
  • Profile
    날개 2009.04.22 22:15
    strList := TStringList.Create;
    strList.Assign(recSSDesc.szId);
    strList.Sort;
    ComBox.Items.Assign(strList);
    strList.Free;

    이런 형식으로 하는건가요??
    Incompatible types: 'TPersistent' and 'Array' 이런 에러가 나네요...
    방법좀 가르쳐주세요.ㅠㅜ
  • Profile
    최용일 2009.04.23 03:13
    쩝~ 대강 아래와 같이 해보세요.

    function TForm1.StringListSortFunc(List: TStringList; Index1, Index2: Integer): Integer;
    var
    Item1, Item2: string;
    begin
    Item1 := Copy(List[Index1], 17, Length(List[Index1]));
    Item2 := Copy(List[Index2], 17, Length(List[Index2]));
    Result := CompareText(Item1, Item2);
    end;

    strList := TStringList.Create;
    for 아이템갯수만큼추가 do
    strList.Add(Format('%-17s%4s',[recSSDesc.szName,recSSDesc.szId]));
    strList.CustomSort(@StringListSortFunc);
    ComBox.Items.Assign(strList);
    strList.Free;
  • Profile
    날개 2009.04.23 20:19
    펑션 설정해놓고 이렇게 해봤는데 안됩니다

    strList := TStringList.Create;
    for ii := 0 to nCount-1 do
    begin
    sString := Copy(sData,(ii*SizeOf(recSSDesc))+1, SizeOf(recSSDesc));
    CopyMemory(@recSSDesc.szId, @sString[1], SizeOf(recSSDesc));
    strList.Add(Format('%-17s%4s',[recSSDesc.szName,recSSDesc.szId]));
    strList.CustomSort(StringListSortFunc);
    ComBox.Items.Assign(strList);
    strList.Free;

    DB에서 7개정도 가져오는것을 1개 밖에 못가져와요
    어떻게 해야하나요?
  • Profile
    최용일 2009.04.23 21:11
    쩝~ 연구좀 해보세요... 생각을 안하면 실력은 안 늘어요...

    for ii := 0 to nCount-1 do
    begin
    디비에서 아이템하나 읽어오기
    strList.Add(읽어온 데이터 추가);
    end;
    정렬;
    comBox.Items.assign(...)
    strList.Free;

    위 코드는 디비에서 읽어오는 부분이 없어요...
  • Profile
    날개 2009.04.24 06:19
    디비에서 데이터는 가지고 오는데요
    디버깅을 해보니 nCount에 8개의 개수를 가지고 오고 sData에 한번씩 넣어주는데
    1번 돌고나서 다음에 돌때 strList.Add(Format('%-17s%4s',[recSSDesc.szName,recSSDesc.szId]));
    이부분에서 오류가 나네요.. 두번째는 추가가 안되는것 같은데
    실행시키면 첫번째 값만 들어와 있어요

    제가 잘못 이해한것인가요??
  • Profile
    최용일 2009.04.25 02:52
    디비에서 데이터 가지고 오는 부분은 제가 알 수가 없죠...
    디비에서 가져오는 부분만 잘 코딩하시면 될것 같은데요...