Q&A

  • Sort 가능한 Grid를 찾습니다~^^*
안녕하세요... 델 초본데요...
그리드 상에서 컬럼 소트를 지원하는 컴포넌트가 있나요?
예를들어, 주민번호, 이름, 나이, 성별, 등의 컬럼이 있고, 그리드에 해당되는 사람들의 데이타가 있을때 나이 컬럼을 누르면 나이로 소트가 되는거 말입니다.
그리드에서 지원하지 않으면 매번 DB에서 order by 해와서 다시 뿌려주고 하는 작업이 만만치 않아서요.
많은 고수님들 답변 기다리겠습니다.

연일 뿌리던 비가 잠잠해질려나봅니다.
다들 무탈하시길 빌고, 평안하세요~^^*
2  COMMENTS
  • Profile
    이추형 2002.08.14 18:22
    고생이 많으십니다.
    DBGrid에서 타이틀을 클릭시 Sort하도록 만들었던 겁니다.
    참조하시기 바랍니다.

    procedure Tfrm.DBGridListTitleClick(Column: TColumn);
    begin
      SortGrid(Column);
    end;

    procedure SortGrid(Column: TColumn);
    var
      slSQL : String;
      ilPos,i : integer;
      p_Qry : TQuery;
    begin
      p_Qry:=TQuery(TDBGrid(Column.Grid).DataSource.Dataset);
      if not p_Qry.Active then Exit;
      if Column.Field.Calculated then Exit;

      for i:=0 to TDBGrid(Column.Grid).Columns.count-1 do
      begin
        if TDBGrid(Column.Grid).Columns[i]<>Column then
        begin
          if Pos('▲',TDBGrid(Column.Grid).Columns[i].Title.Caption)>0 then
            TDBGrid(Column.Grid).Columns[i].Title.Caption:=
              Copy(TDBGrid(Column.Grid).Columns[i].Title.Caption,
                1,Pos('▲',TDBGrid(Column.Grid).Columns[i].Title.Caption)-1);
          if Pos('▼',TDBGrid(Column.Grid).Columns[i].Title.Caption)>0 then
            TDBGrid(Column.Grid).Columns[i].Title.Caption:=
              Copy(TDBGrid(Column.Grid).Columns[i].Title.Caption,
                1,Pos('▼',TDBGrid(Column.Grid).Columns[i].Title.Caption)-1);
        end; //if
      end;//for
      slSQL := UpperCase(p_qry.SQL.Text);
      ilPos := Pos('ORDER BY',slSQL);
      if ilPos > 0 then
        slSQL := copy(slSQL,1,ilPos+Length('ORDER BY'))
      else slSQL := slSQL+ ' ORDER BY';
        if Column.Field.LookUp then
          slSQL := slSQL +' '+Column.Field.KeyFields
        else slSQL := slSQL +' '+Column.Field.Fieldname;
      if Pos('▼',Column.Title.Caption)>0 then
      begin
        slSQL := slSQL+ ' DESC ';
        Column.Title.Caption:=Copy(Column.Title.Caption,1,Pos('▼',Column.Title.Caption)-1);
        Column.Title.Caption:=Concat(Column.Title.Caption,'▲');
      end
      else if Pos('▲',Column.Title.Caption)>0 then
      begin
        Column.Title.Caption:=Copy(Column.Title.Caption,1,Pos('▲',Column.Title.Caption)-1);
        Column.Title.Caption:=Concat(Column.Title.Caption,'▼');
      end
      else
      begin
        Column.Title.Caption:=Concat(Column.Title.Caption,'▼');
      end;
      p_qry.Close;
      p_qry.SQL.Text := slSQL;
      if p_Qry.Owner is TFrmTzzUpdate then
      p_qry.Open;
    end;
  • Profile
    박상기 2002.08.14 13:11
    AdvStringGrid를 쓰시는게 어떨지요?
    물론 Free입니다..구입하면 소스를 제공합니다.
    기능은 약간 떨어지나 그런대로 쓸만 합니다.