+ -
当前位置:首页 → 问答吧 → 为什么DBGridEh1.FrozenCols:=2;会报错?

为什么DBGridEh1.FrozenCols:=2;会报错?

时间:2011-11-20

来源:互联网

第一次正常,
但是再次调用initDBGridEh时,提示'List index out of bounds(2)'

procedure TForm1.FormShow(Sender: TObject);
begin
initDBGridEh;
DBGridEh1.FrozenCols:=2;
end;

procedure TForm1.initDBGridEh();
begin
with ADOQuery1 do
begin
close;
sql.clear;
sql.add(sqlStr);
open;
for i:=0 to FieldCount-1 do
begin
Fields[i].Visible:=False; //调试发现在这边报错,怎么解决呢?
end;
FieldByName('Code').Visible:=True;
end;

因为是要先把字段隐藏的
 

作者: life923   发布时间: 2011-11-20

那是因为有效显示出来的字段数小于2, 因此系统报此错误。

错误含义是:数值已经超出边界。

作者: skyclin   发布时间: 2011-11-20

因为第一次执行initDBGridEh时DBGridEh1.FrozenCols是0
后面执行时DBGridEh1.FrozenCols已经变成上一次设置的值,即2
结果是要保证列数大于或者等于FrozenCols的值

而:
for i:=0 to FieldCount-1 do
begin
Fields[i].Visible:=False;
...
这是把所有的列设置隐藏,
那肯定就报错了

作者: kaikai_kk   发布时间: 2011-11-20

如果'Code'只1显示,在FormShow时应该也是报错

作者: kaikai_kk   发布时间: 2011-11-20