我是用dbgrideh控件作为单据录入. 保存后想再次调出修改, 如果 flg2 是为ture 则不能修改,只能新增 ,试了几个事件都没有办法控制, 请教各位了, 谢谢.这是我写的代码, 颜色显示是正确的  procedure Tfrmysyz_add.DBGridEh1GetCellParams(Sender: TObject;
  Column: TColumnEh; AFont: TFont; var Background: TColor;
  State: TGridDrawState);
begin
  inherited;
  try
     if Column.Field.DataSet.FieldValues['flg2'] then
        begin
          //Column.ReadOnly:=true;
         DBGridEh1.FieldColumns['fyaoid'].ReadOnly:=true;
         DBGridEh1.FieldColumns['tujin'].ReadOnly:=true;
         DBGridEh1.FieldColumns['yongfa'].ReadOnly:=true;
         DBGridEh1.FieldColumns['yongl'].ReadOnly:=true;
         DBGridEh1.FieldColumns['sl'].ReadOnly:=true;
         DBGridEh1.FieldColumns['dj'].ReadOnly:=true;
         Background:=clRed
        end
     else
       begin
        // Column.ReadOnly:=false;
         DBGridEh1.FieldColumns['fyaoid'].ReadOnly:=false;
         DBGridEh1.FieldColumns['tujin'].ReadOnly:=false;
         DBGridEh1.FieldColumns['yongfa'].ReadOnly:=false;
         DBGridEh1.FieldColumns['yongl'].ReadOnly:=false;
         DBGridEh1.FieldColumns['sl'].ReadOnly:=false;
         DBGridEh1.FieldColumns['dj'].ReadOnly:=false;
         Background:=clWindow;
       end;
  except  end;end;

解决方案 »

  1.   

    FieldValues返回的是variant类型,你判断不了真假
    用 
    if Column.Field.DataSet.FieldByName('flg2').AsBoolean = True then
    试试
      

  2.   

    可以用DataSet集的OnBeforeEdit事件,在这个事件中判定某一个字段的值,如不能修改可以写上:DataSet.Cancel;raise Exception.Create('本条记录已经锁定,不能修改!');Abort;等语句。
      

  3.   

    再附加个问题  表字段 text类型的,  怎么解决在report machine 报表正确显示呢值呢?
      

  4.   

    procedure Tfrmysyz_add.QDetailBeforeEdit(DataSet: TDataSet);
    begin
      inherited;
       if ls_modify_flg='N' then
          begin
           if DataSet.FieldByName('flg2').AsBoolean then
             begin
               //DataSet.FieldByName('zh').DataSet.Cancel;
              DataSet.Cancel ;
             raise Exception.Create('本条记录已经锁定,不能修改!');
             Abort;
             end;
          end;
    end;
    按照楼上的方法,是可以控制了, 但是我要有些列的值又可以改 就不行了