问题如上,最好能给一些代码,先给立即给分结帐!!
   THKS!

解决方案 »

  1.   

    procedure Tdb.DBGrid1TitleClick(Column: TColumn);
    begin
      with data.jl do
        begin
          sql.Clear ;
          sql.Add('select * from 扫描记录 order by '+Column.FieldName);
          open;
        end;
    end;
      

  2.   

    数据表为ADOQUERY1时:
    procedure TForm1.DBGrid1TitleClick(Column: TColumn);
    var
      indexfield : string;
    begin
      with adoQuery1 do begin
        indexField := column.Field.FieldName;
        close;
        sql.Clear;
        sql.add(sqlstr);
        sql.add(' order by ');
        sql.add(indexField);
        open;
      end;end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      sqlStr := adoQuery1.SQL.Text;
    end;
      

  3.   

    或者用第三方控件,不用编程:DXDBGRID、DBGRIDEH(昆腾组件、EHLIB组件)
      

  4.   

    楼上老兄说的第三放控件哪里有下的吗?能否给邮一份,多谢!!!
       [email protected]
      

  5.   

    很简单,
    在ontitleclick中写
    Adoquery..Sort :=column.FieldName
      

  6.   

    同意cg1120(代码最优化-§雪是冷的,人是暖的§) ,我也是用Ehlib的DbGridEh的,但还是要自己编程,它能给的就是一个排序符号而已!
      

  7.   

    在FORM1的类定义中加入:
     private
        FSort,FSortField:String;//控制grid排序
    procedure Tform1.jcgridTitleClick(Column: TColumn);
    var
       iFieldCount:Integer;
    begin
      //进行点击Title排序
    for iFieldCount := 0 to jcGrid.Columns.Count - 1 do
      begin
         if (Copy(jcGrid.Columns[iFieldCount].Title.Caption,Length(jcgrid.Columns[iFieldCount].Title.Caption)-1,2) = '∨') or (Copy(jcgrid.Columns[iFieldCount].Title.Caption,Length(jcgrid.Columns[iFieldCount].Title.Caption)-1,2) = '∧') then
         begin
            jcgrid.Columns[iFieldCount].Title.Caption := Copy(jcgrid.Columns[iFieldCount].Title.Caption,1,Length(jcgrid.Columns[iFieldCount].Title.Caption)-3);
            break;
         end;
      end;
      if Column.FieldName = FSortField then
      begin
         if FSort = 'DESC' then
            FSort := 'ASC'
         else
            FSort := 'DESC';
      end
      else begin
        FSortField := Column.FieldName;
        FSort := 'ASC';
      end;
      if FSort = 'ASC' then
         Column.Title.Caption := Column.Title.Caption + ' ∧'
      else
         Column.Title.Caption := Column.Title.Caption + ' ∨';
      cpcdatamodule.jcQuery.Sort:= Column.FieldName + ' ' + FSort;试试,jcquery为一adoquery,jcdbig为一dbgrid......
      

  8.   

    设与dbgrid关联的数据集为ADOTable1.在dbgrid的OnTitleClick事件写:
      ADOTable1.IndexFieldNames:=Column.FieldName;
      

  9.   

    就为排个序就装一第三方控件也太奢侈了吧。楼上的代码都可以的,或者是用adoquery或adodataset的sort属性,或者是直接写sql,order by。
      

  10.   

    DXDBGRIF只需设置一下属性就可以了,
    www.51delphi.com里有下载
      

  11.   

    **********抢分行动***********
    碰到问题查不到,花了半天时间作了一个,不敢独享。
    ADO类的数据集有Sort,但是TClientDataSet没有,故作。procedure SortCDS(Column:TColumn);
    function FindColumn(Grid:TDbGrid;Name:string):TColumn;
    var
      i:integer;
    begin
      Result:=nil;
      for i:=0 to Grid.Columns.Count-1 do
        if Grid.Columns.Items[i].FieldName=Name then
          Result:=Grid.Columns.Items[i];
    end;
    var
      DataSet:TClientDataSet;
      ASC:boolean;      
      Clm:TColumn;
    begin
      DataSet:=TClientDataSet(Column.Field.DataSet);
      if Assigned(DataSet) and (not DataSet.IsEmpty) then
      begin
        if DataSet.IndexName=Column.Fieldname then
          ASC:=StrPos(PChar(Column.Title.Caption),'▼')<>nil;
        Clm:=FindColumn(TDbGrid(Column.Grid),DataSet.IndexName);
        if Assigned(Clm) then
        begin
          DataSet.DeleteIndex(DataSet.IndexName);
          Clm.Title.Caption:=Copy(Clm.Title.Caption,1,Length(Clm.Title.Caption)-2);
        end;
        if Asc then
        begin
          DataSet.AddIndex(Column.Fieldname,Column.FieldName,
                          [ixCaseInsensitive,ixDescending]);
          Column.Title.Caption:=Column.Title.Caption+'▲';
        end
        else begin
          DataSet.AddIndex(Column.Fieldname,Column.FieldName,[ixCaseInsensitive]);
          Column.Title.Caption:=Column.Title.Caption+'▼';
        end;
        DataSet.IndexName:=Column.Fieldname;
      end;
    end;