第一次正常,
但是再次调用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;因为是要先把字段隐藏的
但是再次调用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;因为是要先把字段隐藏的
解决方案 »
- Socket 问题
- 哪错了
- listindex out of bounds
- vb函数转Delphi??
- dbgrid数据源有2个表以上的话,DBGRID是不是会变成只读不能输入了,怎么办
- 郁闷!!!!!!!!!!!!!!救我
- 高分请问?
- 哪位达人帮忙解惑,实在是想不出原因了.list out of bound(*)
- 用DataSnap做一个三层远程操作数据库的例子(增加,修改,删除)
- How to get the Screen saver name setting in Control Panel?
- datasnap我写了一个过程上传下载文件,关闭连接的时候总是出错,内有源码,请高手指点一二
- Delphi远控右击功能创建线程提示错误?
后面执行时DBGridEh1.FrozenCols已经变成上一次设置的值,即2
结果是要保证列数大于或者等于FrozenCols的值而:
for i:=0 to FieldCount-1 do
begin
Fields[i].Visible:=False;
...
这是把所有的列设置隐藏,
那肯定就报错了
FieldByName('Code').Visible:=True;
FieldByName('name').Visible:=True;
...
...
一般不是在formshow中写,你可以在formcreat中写
先打开dbgrideh的数据源
adoquery1.open;
DBGridEh1.FrozenCols:=2;
for i:=0 to FieldCount-1 do
begin
Fields[i].Visible:=False;
end;
FieldByName('Code').Visible:=True;
FieldByName('Name').Visible:=True;
FieldByName('HelpCode').Visible:=True;
DBGridEh1.FrozenCols:=1;
end;这样也报错啊
因为我的ADOQuery1是取出所有字段
所以需要在后面隐藏,再把需要显示的字段 显示出来
既然要留下冻结列就从第三列开始:
for i:=2 to DBGridEh1.Columns.Count-1 do
begin
self.DBGridEh1.Columns[i].Visible:=False;
end;
...
DBGridEh1.FrozenCols:=0;
for i:=0 to FieldCount-1 do
begin
Fields[i].Visible:=False; ...DBGridEh1.FrozenCols:=2;