为什么我的dbgrid的网格宽度在adoquery更新后宽度会改变?
procedure TfrmKh.FormCreate(Sender: TObject);
begin
   dm.ADOQuerykh.Close;
   dm.ADOQuerykh.SQL.Clear;
   dm.ADOQuerykh.SQL.Add('select * from main_kh');
   dm.ADOQuerykh.Open;
   dm.ADOQuerykh.Active:=true;
   dbgrid1.Columns[0].Width:=80;
   dbgrid1.Columns[1].Width:=110;
   dbgrid1.Columns[2].Width:=100;
   dbgrid1.Columns[3].Width:=100;
   dbgrid1.Columns[4].Width:=100;
   self.top :=(frmmain.Height-frmmain.fcStatusBar1.Height  -self.Height ) div 3;
   self.Left:=(frmmain.Width-frmmain.fcOutlookBar1.Width  -self.Width) div 2;
   self.Edit1.Text:=self.DBGrid1.Fields[0].AsString;
end;
在添加后更新
 dm.ADOQuerykh.Refresh;
但是更新后宽度改变了,请问如何解决?

解决方案 »

  1.   

    把设置宽度的代码写在一个过程里,每次Refresh时调用:
    procedure TfrmKh.SetDbGridWidth;
    begin
       dbgrid1.Columns[0].Width:=80;
       dbgrid1.Columns[1].Width:=110;
       dbgrid1.Columns[2].Width:=100;
       dbgrid1.Columns[3].Width:=100;
       dbgrid1.Columns[4].Width:=100;
    end;dm.ADOQuerykh.Refresh;
    SetDbGridWidth;
      

  2.   

    或者你在设计时,双击DBGrid1,选Add All Fields添加全部字段,然后分别设置这些列的宽度。设好后以后怎么刷新宽度都不会变了。
      

  3.   


     dm.ADOQuerykh.Refresh
       dbgrid1.Columns[0].Width:=80;
       dbgrid1.Columns[1].Width:=110;
       dbgrid1.Columns[2].Width:=100;
       dbgrid1.Columns[3].Width:=100;
       dbgrid1.Columns[4].Width:=100;
       这样的次序试试看
      

  4.   

    我在设计时设置的和程序中的是一样的,但还是改变,在refresh后改变宽度则出错,为什么呀?