排序方式写好后,单击表头出现了错误"一串英文的错误",意思是连接违反了某某地址.
方法如下:
    procedure TfmRemoteLoadData.GridSort(Sender: Tobject);
var
  s:string;
  i:integer;
begin
  if not TDBGridEh(sender).DataSource.DataSet.Active then exit;
  if TDBGridEh(sender).DataSource.DataSet.State in [dsInsert, dsEdit] then exit;
  for i := 0 to TDBGridEh(sender).SortMarkedColumns.Count-1 do
  begin
    if TDBGridEh(sender).SortMarkedColumns[i].Field.FieldKind<>fkData then
    begin
      continue;
    end;
    if TDBGridEh(sender).SortMarkedColumns[i].Title.SortMarker = smUpEh then
      s := s + TDBGridEh(sender).SortMarkedColumns[i].FieldName + ', '
    else
      s := s + TDBGridEh(sender).SortMarkedColumns[i].FieldName + ' DESC , ';
  end;
  TCustomADODataSet(TDBGridEh(sender).DataSource.DataSet).Sort:=Copy(s,1,Length(s)-2);
end;请哪位大侠知道告诉我,谢谢!!

解决方案 »

  1.   

    我直接改过EHGrid的排序。并没有出现什么错误。
    procedure TCustomDBGridEh.TitleClick(Column: TColumnEh);
    var s,cFieldName:string;
        i:integer;
        DataSet:TDataSet;
    begin
      //2005-10-18  jzl update
      Try
        Try
          if UsedTitleSort then begin
            if not Assigned(DataSource) then  Exit;
            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;
              end
              else begin
                if Pos(cFieldName,s)<>0 then begin
                  i:=Pos('DESC',s);
                  if i<=0 then begin
                    s:=s+' DESC';
                  end
                  else begin
                    Delete(s,i,4);
                  end;
                end
                else begin
                  s:=cFieldName;
                end;
              end;
              TCustomADODataSet(DataSet).Sort:=s;
            end
            else if DataSet is TClientDataSet then begin
              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;
              end
              else
              begin
                TClientDataSet(DataSet).IndexName:='';
                TClientDataSet(DataSet).IndexFieldNames:=column.fieldname;
              end;
            end;
          end;
        Except
        End;
      Finally
        if Assigned(FOnTitleClick) then FOnTitleClick(Column);
      End;//old   if Assigned(FOnTitleClick) then FOnTitleClick(Column);
    end;
      

  2.   

    1.uses 子句中加上 EhlibADO单元2.设置DBGridEH 的[OptionsEn]属性中的 dgAutoSortMarking 属性设置为 True;3.双击该组件,在其弹出的属性编辑器中添加相关字段;4.将要排序的字段的属性列表的 [Title]的 TitleButton 属性设置为 True;5.点击字段标题栏可以排序了