SortStr := Column.FieldName+' ASC';
可以参考下面:
        if (Pos(FieldNames, Sort) = 1) and (Pos(' DESC', Sort) = 0) then
        Sort := FieldNames + ' DESC' else
        Sort := FieldNames + ' ASC';

解决方案 »

  1.   

    问题在于给Sort赋值时就出错!
      

  2.   

    确认是否存在此字段
    如果存在:
    字段类型一定是fkData,或是 fkLookup 类型
    //可以 用:Column.Field.FieldKind in [fkData,fkLookup]  判断
    如果是fkLookup型 就用
    SortStr := Column.Field.FieldName+' ASC';
    如果是其他类型可能就不行了
      

  3.   

    我这个字段是fkData的!
    但是为什么只有fkLookup才可以排序呢?
      

  4.   

    因为fdData是实际存在的字段
    而fkLookup也是有一个实际存在与别的表建立连接
    就是得到实际存在与其它表连接的字段(上面说错了)看下面:
    我写了一个通用过程:Procedure OrderGrid(Column: TColumn);
    Var
      DataSet: TDataSet;
      FieldNames:String;
    Begin
        if not Column.Field.DataSet.Active then abort;
        if not (Column.Field.FieldKind in [fkData,fkLookup]) then exit;
        DataSet := Column.Field.DataSet;
        if Column.Field.Lookup then FieldNames:= Column.Field.KeyFields
        else FieldNames:=Column.Field.FieldName;
        if DataSet is TCustomADODataSet then
        with TCustomADODataSet(DataSet) do
          begin
            if (Pos(FieldNames, Sort) = 1) and (Pos(' DESC', Sort) = 0) then
            Sort := FieldNames + ' DESC' else
            Sort := FieldNames + ' ASC';
          end;
    end;