我先说明一下情况。
操作系统: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上有明显的痕迹,效果很差。
操作系统: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上有明显的痕迹,效果很差。
var
I: Integer;
begin
for I := 15 to DBGrid1.Columns.Count-1 do
DBGrid1.Columns[I].Visible := False;
end;—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
dbgWM_BasicDrawColumnCell 这个事件会使Dbgrid重画。所以会那样。