代码好像没有错误,关键在于你的DBGrid的列是否已经设计好了,调用函数 dbgrid.Columns.RebuildColumns是通过数据库连接系统自动重新生成DBGrid的列, 应该将这行代码删除,再在循环中动态生成DBGrid的列,就没有问题了。 代码类似如下:var Column: TColumn; begin Qry_Auto.Open; dbgrid.Columns.Clear; //dbgrid.Columns.RebuildColumns; for i:=0 to Qry_Auto.RecordCount-1 do begin Column:=dbGrid.Columns.Add; Column.FieldName:=Qry_Auto.fieldbyname('code').asstring; Column.Title.Caption:=Qry_Auto.fieldbyname('name').asstring; if Column.FieldName='gzh' then begin Column.ReadOnly:=true; end;
dbgrid.Columns.RebuildColumns是通过数据库连接系统自动重新生成DBGrid的列,
应该将这行代码删除,再在循环中动态生成DBGrid的列,就没有问题了。
代码类似如下:var
Column: TColumn;
begin
Qry_Auto.Open;
dbgrid.Columns.Clear;
//dbgrid.Columns.RebuildColumns;
for i:=0 to Qry_Auto.RecordCount-1 do
begin
Column:=dbGrid.Columns.Add;
Column.FieldName:=Qry_Auto.fieldbyname('code').asstring;
Column.Title.Caption:=Qry_Auto.fieldbyname('name').asstring;
if Column.FieldName='gzh' then
begin
Column.ReadOnly:=true;
end;