我先说明一下情况。
操作系统:Windows 2000 Server
开发工具:Delphi7.0
数据库:SQL Server 2000
控件:ADO有一个查询会返回超过30个字段的信息,我在界面中使用了DBGrid和一些DBText用来显示这个查询的结果,由于字段比较多,我希望在DBGrid中只显示前15个字段的信息,后15个我用了15个DBText来显示。为了使DBGrid不显示后15个字段的信息。我在DBGrid的DrawColumnCell事件中简单添加了以下的代码:
procedure TfrmWM_Query.dbgWM_BasicDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if DataCol> 15 then
    Column.Visible:= False;
end;现在出现了问题,开始显示时很正常,DBGrid的确只显示了前15个字段,可是当我想使用鼠标任意选择一行时,却发现无法做到,指针一直保持在第一行不动,我只有使用键盘的"向下"或是"向上"健才能够移动指针。我已经识过了,如果我不添加DrawColumnCell事件的代码,让30个字段全部显示的话,不会出现这个问题。请问怎么解决?????????????????????????????????????注:请不要做出"将代码修改成Column.Width:= 0"这样的回答,我试过了,DBGrid上有明显的痕迹,效果很差。

解决方案 »

  1.   

    呵呵,你直接在设计时双击DBGrid,选择需要的自然,删除掉不需要的字段就行了,不必那么麻烦啊!
      

  2.   

    procedure TForm1.FormCreate(Sender: TObject);
    var
      I: Integer;
    begin
      for I := 15 to DBGrid1.Columns.Count-1 do
         DBGrid1.Columns[I].Visible := False;
    end;—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  3.   

    对呀,在DBGrid的Columns属性中设置要显示的字段即可
      

  4.   

    支持 pilicat ,就用那种方法,简单明了。
    dbgWM_BasicDrawColumnCell 这个事件会使Dbgrid重画。所以会那样。
      

  5.   

    不要去设置DBGRID相应的COL的VISIBLE属性,而是设置数据集的15个以后的字段的VISIBLE的属性。这样就不会有什么问题了。