cxGrid把GridMode设置为TRUE的时候,点列标题的时候不能自动排序了。如何解决?

解决方案 »

  1.   

    自己写排序代码了
    var
      I: Integer;
      s, sLine: string;
      sl: TStringList;
    begin
      with TcxGridDBTableView(TcxGridDataController(Sender).GridView) do
      begin
        if not Assigned(DataController.DataSource) then Exit;
        if DataController.DataSource.State <> dsBrowse then Exit;    sl := TStringList.Create;
        try
          for I := 0 to ColumnCount - 1 do
            with Columns[I] do
            begin
              sLine := Format('%0.2d', [SortIndex]) + DataBinding.FieldName;
              case SortOrder of
                soAscending:
                  sl.Add(sLine + ' ASC');
                soDescending:
                  sl.Add(sLine + ' DESC');
              end;
            end;
          sl.Sort;      s := '';
          for I := 0 to sl.Count - 1 do
            s := s + ',' + Copy(sl[I], 3, Length(sl[I]));
          Delete(s, 1, 1);
          TADOQuery(DataController.DataSource.DataSet).Sort := s;
        finally
          sl.Free;
        end;
      end;
      

  2.   

    procedure Tform1.dBGrid1TitleClick(Column: TColumn);
    var
      i:integer;
    begin
    if (Not ADOQuery1.Active) or (ADOQuery1.RecordCount = 0) then exit;
    /////////////////////////////////////////////////////////////清除标题头
    for i:=0 to dbgrid1.Columns.Count-1 do
      if (pos('∧',dbgrid1.Columns.Items[i].Title.caption)>0) or (pos('∨',dbgrid1.Columns.Items[i].Title.caption)>0) then
      dbgrid1.Columns.Items[i].Title.caption:=copy(dbgrid1.Columns.Items[i].Title.caption,1,length(dbgrid1.Columns.Items[i].Title.caption)-2);
    ///////////////////////////////////////////////////////////////////////
    try
      if Pos('ASC',ADOQuery1.Sort)=0 then
        begin
          ADOQuery1.Sort := column.fieldname + ' ASC';
          column.Title.Caption:=column.Title.Caption  +'∧';
        end
      else
        begin
         ADOQuery1.Sort := column.fieldname + ' DESC';
         column.Title.Caption:=column.Title.Caption  +'∨';
        end;except
      application.MessageBox('不允许对该列排序!','提示',mb_ok+mb_iconerror);
    end;end;