刚刚学用delphi编程,须对TDBgrid中的点击title排序,在网上找到这样一段代码,用在这里可以吗?
我用的是TDBgrid,Database1,DataSource1,Query1。procedure DbGridSort(Column: TColumn);
var s,cFieldName:string;
    i:integer;
    DataSet:TDataSet;
    procedure setTitle;
    var ii:integer;
        cStr:string;
        c:TColumn;
    begin
      for ii:=0 to TDBGrid(Column.Grid).Columns.Count-1 do
      begin
        c:=TDBGrid(Column.Grid).Columns[ii];
        cStr:=c.Title.Caption;
        if (pos('▲',cStr)=1) or (pos('▼',cStr)=1) then begin
          Delete(cStr,1,2);
          c.Title.Caption:=cStr;
        end;
      end;    end;
begin
  setTitle;
  DataSet:=Column.Grid.DataSource.DataSet;
  if Column.Field.FieldKind=fkLookup then
    cFieldName:=Column.Field.KeyFields
  else if Column.Field.FieldKind=fkCalculated then
    cFieldName:=Column.Field.KeyFields
  else
    cFieldName:=Column.FieldName;
  if DataSet is TCustomADODataSet then begin
    s:=TCustomADODataSet(DataSet).Sort;
    if s='' then begin
      s:=cFieldName;
      Column.Title.Caption:='▲'+Column.Field.DisplayName;
    end
    else begin
      if Pos(cFieldName,s)<>0 then begin
        i:=Pos('DESC',s);
        if i<=0 then begin
          s:=s+' DESC';
          Column.Title.Caption:='▼'+Column.Field.DisplayName;
        end
        else begin
          Column.Title.Caption:='▲'+Column.Field.DisplayName;
          Delete(s,i,4);
        end;
      end
      else begin
        s:=cFieldName;
        Column.Title.Caption:='▲'+Column.Field.DisplayName;
      end;
    end;
    TCustomADODataSet(DataSet).Sort:=s;
  end
  else if DataSet is TClientDataSet then begin///////////{到这里有错误,说TClientDataSet 为未说明的标识符,TClientDataSet是什么?}
//    TClientDataSet(DataSet).IndexFieldNames:=Column.FieldName;//
{这里也有错}
    if TClientDataSet(DataSet).indexfieldnames<>'' then
    begin
      i:=TClientDataSet(DataSet).IndexDefs.IndexOf('i'+Column.FieldName);
      if i=-1 then
      begin
        with TClientDataSet(DataSet).IndexDefs.AddIndexDef do
        begin
          Name:='i'+Column.FieldName;
          Fields:=Column.FieldName;
          DescFields:=Column.FieldName;
        end;
      end;
      TClientDataSet(DataSet).IndexFieldNames:='';
      TClientDataSet(DataSet).IndexName:='i'+Column.FieldName;
      Column.Title.Caption:='▼'+Column.Field.DisplayName;
    end
    else
    begin
      TClientDataSet(DataSet).IndexName:='';
      TClientDataSet(DataSet).IndexFieldNames:=column.fieldname;
      Column.Title.Caption:='▲'+Column.Field.DisplayName;
    end;
  end;
end;