怎样当单击DBGrid中的标题栏时,进行排序

解决方案 »

  1.   

    方法:关键是用DBGrid的事件 OnTitleClick首先判断单击是哪一列,     i:=Column.Index;然后要确定是哪个字段    Field:=DBGrid1.Columns[i].FieldName+' ASC';最后进行排序:    qryWork.Sort:=Field; 上面仅仅是进行升序排列,若要添加降序排列,则要用' DESC'若要单击后,升序,再单击,降序.....则要用到一个奇偶判断我的一个例子(其中的bSort:Boolean,在FormShow的时候初始化)procedure TfmPlayVideo.DBGrid1TitleClick(Column: TColumn);
    var
        i:integer;
        fieldname:string;
    begin//排序
        i:=Column.Index;
        if bSort then
        begin
            fieldname:=DBGrid1.Columns[i].FieldName+' ASC';
            bSort:=False;
        end
        else
        begin
            fieldname:=DBGrid1.Columns[i].FieldName+' DESC';
            bSort:=True;
        end;
        qryShow.Sort:=fieldname;
    end;
      

  2.   

    用dbgrideh更方便一些呀.不防考虑一下喽
      

  3.   

    楼上说的不错,最好改成dbgrideh把
    因为它还可以在点击排序时,出现上下排序小三角图标。
      

  4.   

    严重推荐DbGridEh控件。实现起来真的好简单。我已经这样在用了。
      

  5.   

    dbgrideh要什么设置让他排序.还有TO:hujinger(克沙) 
    qryShow.Sort:=fieldname;是什么意思.调试会出错.
      

  6.   

    就是你点击的DBGRID的数据表的列名,换一个是可能是保留字,换为 szField等试试。不要忘记将上面的都换了。
      

  7.   

    DBGrid1Title事件:
    ISDESC 為排序方向的BOOLEAN值。PROCEDURE THELPRIGHTSET_LOGFRM.DBGrid1TitleClick(Column: TColumn);
    BEGIN
      IF Column.FieldName = 'optname' THEN
      BEGIN
        IF ISDESC THEN
          OPENQRY('OPT_ID ASC ')
        ELSE
          OPENQRY('OPT_ID DESC ');
      END
      ELSE
      BEGIN
        IF ISDESC THEN
          OPENQRY(Column.FieldName + ' ASC ')
        ELSE
          OPENQRY(Column.FieldName + ' DESC ');
      END;
    END;
    PROCEDURE THELPRIGHTSET_LOGFRM.OPENQRY(SQLORDERSTR: STRING);
    BEGIN
      WITH GSDDATAMOD.QRYBAS_LOGDOC DO
      BEGIN
        close;
        SQL.Clear;
        SQL.Add(SQLSTR);
        sql.Add(WhereStr);
        SQL.Add(' ORDER BY ' + SQLORDERSTR);
        ParamByName('OPT_CREATDATE1').ParamType := ptInput;
        ParamByName('OPT_CREATDATE1').DataType := ftDateTime;
        ParamByName('OPT_CREATDATE1').AsDateTime := dt1;
        ParamByName('OPT_CREATDATE2').ParamType := ptInput;
        ParamByName('OPT_CREATDATE2').DataType := ftDateTime;
        ParamByName('OPT_CREATDATE2').AsDateTime := dt2;
        open;
        FieldByName('SYSTEMNAME').DisplayWidth := 14;
        FieldByName('MODNAME').DisplayWidth := 16;
        FieldByName('MODKEY_NO').DisplayWidth := 12;
        FieldByName('MODCONT').DisplayWidth := 20;
        FieldByName('OPTTYPE').DisplayWidth := 4;
        FieldByName('OPT_ID').DisplayWidth := 15;
        FieldByName('optname').DisplayWidth := 10;
        FieldByName('OPT_CREATDATE').DisplayWidth := 21;
        Label3.Caption := '返回的記錄數﹕' + inttostr(RecordCount) + ' 條';
      END;
    END;