如:if DBGrid1.SelectedField.FieldName = 'iYear'  //在指定列离开之后实现另一列显示,但无法显示,不知为何?     then
        begin
        showmessage('bbb');
        dbgrid1.Columns[1].Visible:=true ;//这行无法实现 ,代码写在button内就可以实现     
        
     end;

解决方案 »

  1.   

    如果是dbgrid,列隐藏后,index会重新计算,就不会包含隐藏列了 个人认为需要遍历,参考代码如下 
    procedure TForm1.Button13Click(Sender: TObject);
    var
      i,j:Integer;
    begin
      if self.DBGrid2.SelectedField.FieldName='iYear'then
      begin
        i:=self.DBGrid2.Columns.Count;
        for j:=0 to i-1 do
        begin
          if self.DBGrid2.Columns[j].FieldName='bbb' then
          begin
            self.DBGrid2.Columns[j].Visible:=True;
            Break;
          end;
        end;
      end
      else
      begin
        i:=self.DBGrid2.Columns.Count;
        for j:=0 to i-1 do
        begin
          if self.DBGrid2.Columns[j].FieldName='bbb' then
          begin
            self.DBGrid2.Columns[j].Visible:=False;
            Break;
          end;
        end;
      end;
    end;
      

  2.   

    这段代码放到DBGrid2CellClick里也能实现你要求的功能啊