当DataSource.AutoEdit:=False,DBEdit编辑会报错,DBGrid却可以自动变为只读模式,这是为什么?

解决方案 »

  1.   

    DBEdit是用来连接数据库的某列内容的,用Edit不是更好!:)
      

  2.   

    用Edit,很多时候都不是很方便,如改变记录后Edit里的内容要重新更新
      

  3.   

    如果当DataSource.AutoEdit:=False,时,那你在DBEdit onEnter时让它dataSource.eidt不就可以了.
      

  4.   

    让DataSource.AutoEdit:=False目的就是想使DBEdit不能够编辑,如果将DBEdit.ReadOnly:=True的话,则太麻烦了。
      

  5.   

    目的:
    当用户选择工具条上的修改按钮后才允许让用户对资料进行修改(DataSource.autoedit:=Ture),否则只允许用户对资料进行查看(DataSource.autoedit:=False)。
      

  6.   

    DataSource是数据集控件(如TQuery或TTable等)与数据感知控件的桥梁.如果DataSource.autoedit:=False,则所有与其相连的数据感知控件全部无效.DBGrid可以在DataSource.autoedit:=False时自动变为只读,而DBEdit编辑会报错.解决方法如下:procedure SetAllDBEditState(AForm:TForm;ADataSource:TDataSource;MyState:Boolean);
    begin
      for i:=0 to AForm.ComponentCount-1 do
      begin
        if AForm.Components[i] is TDBEdit then
        begin
          if TDBEdit(AForm.Components[i]).DataSource=ADataSource then
          begin
            TDBEdit(AForm.Components[i]).ReadOnly:=MyState;
          end;
        end;
      end;
    end;
    调用方法:在DataSource的OnStateChange事件中编写如下代码:begin
      SetAllDBEditState(Self,TDataSource(Sender),TDataSource(Sender).AutoEdit);
    end;