Q&A

  • DBGrid 소트 문제
DBGrid 에서 필드 라벨을 클릭하면 탐색기 처럼 오름차순과 내림차순을 번갈아 가며 소트 되는 방법은 없을지요...?



고수님들 부탁드리겠습니다.

2  COMMENTS
  • Profile
    최석기 2000.06.20 19:33
    심재복 wrote:

    > DBGrid 에서 필드 라벨을 클릭하면 탐색기 처럼 오름차순과 내림차순을 번갈아 가며 소트 되는 방법은 없을지요...?

    >

    > 고수님들 부탁드리겠습니다.



    전 밑에 방법과 좀 다른 방법인데요 참고하세요.



    Table 콤포넌트를 사용하신다면 Open 시점에서 동적으로 Index를 사용하실 수 있거든요.



    디자인 타임에는 오브젝트 인스펙트에서 IndexDef에 원하시는 인덱스를 정의 시켜주시면 되거든요.



    런타임 시에는 AddIndex라는 메소드를 사용하셔서 동적으로 인덱스를 만드시면 되요..



    인덱스는 원하는 필드에 오름차순 하나 내림차순 하나 해서 두개씩 만들어서 타이틀 클릭시 인덱스명을 바꿔 주면 됩니다.



    뭐 쿼리로 오픈해야 한다면 DataProvider을 사용해서 Query랑 ClientDataSet를 연결해서 ClientDataSet에 있는 메소드를 사용하면 되죠..



    아래 다른 님이 쓰신 방법은 자료가 많을 때 소트 한번 하면 리오픈하는 효과가 발생해서 느리더군요.



    대신 이 방법은 처음 오픈 시점에서 속도가 조금 떨어지네요..



    뭐 둘다 장단점이 있네요..

  • Profile
    강민주 2000.06.20 07:30
    심재복 wrote:

    > DBGrid 에서 필드 라벨을 클릭하면 탐색기 처럼 오름차순과 내림차순을 번갈아 가며 소트 되는 방법은 없을지요...?

    >

    > 고수님들 부탁드리겠습니다.



    안녕하세요. ^^

    제가 팁란에 올렸던 내용인뎅.. 참고하세요.



    DBGrid 타이틀 Column클릭시 정렬 시키기



    procedure TForm1.DBGrid1TitleClick(Column: TColumn);

    begin

    with Query1 do

    begin

    DisableControls;

    Close;

    SQL.Clear;

    SQL.Add(QuerySQL);

    SQL.Add('ORDER BY ' + Column.FieldName);

    Open;



    DBGrid1.Columns.RestoreDefaults;

    Column.Title.Font.Color := clBlue;

    EnableControls;

    end;

    end;