设置DBGridEh1的OptionsEh的dghautosortMarking为True,AQ_DBGridEh1是adoquery控件,我的代码如下:procedure TForm1.DBGridEh1SortMarkingChanged(Sender: TObject);
var i :Integer;
    s:String;
   function DeleteStr(str:String; sunstr:String): String;
   var i:Integer;
   begin
     i := Pos(sunstr,str);
     if i <> 0 then Delete(str,i,Length(sunstr));
     Result := str;
   end;
begin
  s := '';
  for i := 0 to DBGridEh1.SortMarkedColumns.Count-1 do
   if DBGridEh1.SortMarkedColumns[i].Title.SortMarker = smUpEh then
     s := s + DBGridEh1.SortMarkedColumns[i].FieldName + ' DESC , '
   else
     s := s + DBGridEh1.SortMarkedColumns[i].FieldName + ', ';
  if s <> '' then s := ' ORDER BY ' + Copy(s,1,Length(s)-2);
  s := DeleteStr(s,'1');
  AQ_DBGridEh1.SQL.Strings[AQ_DBGridEh1.SQL.Count-2] := s;
  AQ_DBGridEh1.Close;
  AQ_DBGridEh1.Open;
end;或:
procedure TForm1.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer;
  Column: TColumnEh);
begin
  case Column.Title.SortMarker of
    smNoneEh: Column.Title.SortMarker := smDownEh;
    smDownEh: Column.Title.SortMarker := smUpEh;
    smUpEh: Column.Title.SortMarker := smNoneEh;
  end;
end;当点击标题栏时,提示如下错误,怎么解决?
List index out of bounds(-1)

解决方案 »

  1.   

    我是这样实现的:
    procedure TForm.DBGridEhTitleBtnClick(Sender: TObject;
      ACol: Integer; Column: TColumnEh);
    var
      s :string;
    begin
      //进行排序
      with Column do
      begin
        if FieldName = '' then
          Exit;
          
        case Title.SortMarker of
          smNoneEh:
            begin
              Title.SortMarker := smDownEh;
              s := Column.FieldName + ' ASC';
            end;
          smDownEh: s := Column.FieldName + ' ASC';
          smUpEh: s := Column.FieldName + ' DESC';
        end;
      end;
      ADOQuery.Sort := s;
    end;
    不过你一分不给也太……