rt

解决方案 »

  1.   

    取得點擊事件,在該事件中對DataSet排序。
    如果是TClientDatset那麼你該學會怎樣定義TClientDatset的索引,指定不同的索引,TClientDatset就能按不同的字段做升序或降序排序。
      

  2.   

    在DBGrid的OnTitleClick中写下
      ClientDataSet1.IndexName:=Column.FieldName;
      

  3.   

    我就是不会用DataSet中的索引,请楼上明示,最好详细点,谢了
      

  4.   

    撞到枪口上了,把分全给我。
    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;tdbgrid.oncolumnclick 中用以下过程
    procedure SortCDS(Column:TColumn);
    var
      DataSet:TClientDataSet;
      ASC:boolean;      
      Clm:TColumn;
    begin
      DataSet:=TClientDataSet(Column.Field.DataSet);
      if Assigned(DataSet) and DataSet.Active then
      begin
        ASC:=(StrPos(PChar(Column.Title.Caption),'▼')<>nil)
             and (DataSet.IndexName=Column.Fieldname);
        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,[ixDescending]);
          Column.Title.Caption:=Column.Title.Caption+'▲';
        end
        else begin
          DataSet.AddIndex(Column.Fieldname,Column.FieldName,[]);
          Column.Title.Caption:=Column.Title.Caption+'▼';
        end;
        DataSet.IndexName:=Column.Fieldname;
      end;
    end;dataset.beforeclose之前用以下过程procedure UnSortCDS(DbGrid:TDbGrid);
    var
      DataSet:TClientDataSet;
      Column:TColumn;
    begin
      DataSet:=TClientDataSet(DbGrid.DataSource.DataSet);
      if Assigned(DataSet) then
      begin
        Column:=FindColumn(DbGrid,DataSet.IndexName);
        if Assigned(Column) then
        begin
          DataSet.DeleteIndex(DataSet.IndexName);
          Column.Title.Caption:=Copy(Column.Title.Caption,1,
                                     Length(Column.Title.Caption)-2);
        end;
      end;
    end;
      

  5.   

    hehe,我来晚了,也给我点分吧  :)
    收藏
      

  6.   

    dataset有sort方法,可以给取得的数据集排序