:[:)][:)]请高手帮忙,怎么在dbgrid中锁定某几行不允许编辑,已经提出多次仍然没有完美的解决方法!!! (40分)

  • 主题发起人 luozhaoliang
  • 开始时间
L

luozhaoliang

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个dbgrid中有一个‘审核’字段,当一条记录被审核后就不允许对这条记录做任何修改
后一种解决方法是:
procedure Tpartno_add.ADOTable1AfterScroll(DataSet: TDataSet);
begin
if adotable1.FieldByName('审核').AsBoolean=true then
adotable1.ReadOnly:=true
else adotable1.ReadOnly:=false;
end;
设置AfterScroll事件,但是这个事件好像只有当记录移动后才会发生,当我们开始打窗口时adotbale的记录是在第一条,也就是说当第一个条记录被审核了,但依然可以修改,而被审核的第二条记录起才不能修改,
我想原因是adotbale打开后,记录停在第一条记录,不触发AfterScroll事件
不知道还有什么更完美的解决方法?
还有就是我在一个form1中interface后的 public处定义了全局的公共变量A,但是我在这个地from1中这样引用这出错:form1.A就会发生地址错误,而直接引用A就不会这事,这是为什么啊
 
在 FORMSHOW 事件里面强制调
ADOTable1AfterScroll(sender) ;
就可以了
 
ADOTable1AfterScroll(sender)
发生错误
 
FORMSHOW事件或adotable1所连DataSource的DataChange事件中,
这样调用试试:
ADOTable1AfterScroll(nil) ;
 
在AfterOpen中加入
DataSet.OnAfterScroll(DataSet)
或者在BeforeEdit中试试
 
ADOTable1AfterScroll(sender)
发生错误 可能是因为你的 TABLE 没有打开 你可以改在 ONACTIVE 事件中强制触发
 
应该在 ADOTable1 的 onopen 中加入
ADOTable1AfterScroll(sender)
 
还有就是我在一个form1中interface后的 public处定义了全局的公共变量A,但是我在这个地from1中这样引用这出错:就会发生地址错误,而直接引用A就不会这事,这是为什么啊
=====================================================================================
当你这样定义的时候,编译器在编译A时,既把A作为类TFORM1的字段处理,又把A作为全局变量处理,相互矛盾,当然出错。
 
那请问全局变量到底应该怎么定义才能让其它的窗体能够访问到呢?
 
专业的OOP开发应该避免用变量 一定要用
放在 implementation 的前面就可以了 其他窗口必须 USES 你这个 UNIT
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
489
import
I
I
回复
0
查看
579
import
I
顶部