下列事件过程,点击列标题后能排序,颜色和▼\▲能够切换,但是,点击另一列后,原来那一列的▼或▲符号不会消失.我的要求是,点击另一列后原来的那一列只显示列标题,不在显示▼或▲符号,请问怎么处理?
procedure TForm1.DBGrid3TitleClick(Column: TColumn);
var i:integer;
begin
 if adoquery2.Sort = Column.FieldName then  //AdoQCX为MyDBGrid绑定的Tadoquery
   begin
     For i:=0 to dbgrid3.Columns.Count-1 do
       dbgrid3.Columns[i].Title.RestoreDefaults;
     adoquery2.sort := Column.FieldName + ' DESC';
     Column.Title.Font.Color:=clPurple;    //用紫色表示 逆序
     dbgrid3.Canvas.Refresh ;
     Column.Title.Caption:=dbgrid3.SelectedField.FieldName + '▼' ;
   end
 else begin
   For i:=0 to dbgrid3.Columns.Count-1 do
     dbgrid3.Columns[i].Title.RestoreDefaults;
   adoquery2.Sort := Column.FieldName;
   Column.Title.Font.Color:=clBlue;    //用蓝色表示正序字段
   dbgrid3.Canvas.Refresh ;
   column.Title.Caption:=dbgrid3.SelectedField.FieldName + '▲' ;
   end;
end;

解决方案 »

  1.   

    点击后循环各COULMN判断是不是当前列如何!不是就把题头改下!
      

  2.   

    怎么置空?是这样吗?通不过
    column.Title.Caption:='';
      

  3.   

    我为了与广大DELPHI爱好者共同讨论,建立了一个群,欢迎大家加入!
    群号是:5245338
      

  4.   

    procedure TForm1.DBGridTitleClick(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(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;