以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何在锁定主表时锁定子表  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=49419)

--  作者:chnfo
--  发布时间:2014/4/17 16:25:00
--  [求助]如何在锁定主表时锁定子表
我用了导航,通过权限的设定锁定了主表,但如何同时锁定子表呢?
--  作者:Bin
--  发布时间:2014/4/17 16:33:00
--  
一样的啊.和锁定主表的代码一致的
--  作者:chnfo
--  发布时间:2014/4/17 16:38:00
--  
解释一下咯,我是希望主表锁定之后,子表自动锁定。因为我现在的代码只锁定了主表 现在,并不是听有表都有子表
[此贴子已经被作者于2014-4-17 16:39:19编辑过]

--  作者:Bin
--  发布时间:2014/4/17 16:52:00
--  
自己设计一个锁定按钮.  

参考帮助.遍历关联获得当前表的子表,进行锁定http://www.foxtable.com/help/topics/1941.htm



--  作者:有点甜
--  发布时间:2014/4/17 16:58:00
--  

 锁定主表以后,锁定关联表就好。

 

 其实可以通过比较Table的name得到结果的。

 

 不过,假如一个table有多个父表的话,是否锁定,也得考虑一下。最好定义权限的时候,指定对应关系。

[此贴子已经被作者于2014-4-17 16:58:46编辑过]

--  作者:chnfo
--  发布时间:2014/4/17 20:48:00
--  
我是这么想的
先定义一个全局代码 public RightTb as table,用来定义Link对应的主表。

TopicLinkClick事件中,
Select Case e.Link.Name
    Case "业务01"
        MainTable = Tables("表A")
…………
end select 

RightTb = MainTable  ’当打开 Link时,将主表名赋值给全局代码RightTb 
Dim dr As DataRow = DataTables("权限表").Find("判断是否有编辑权限的Filter")
RightTb.allowEdit = dr IsNot Nothing AndAlso dr("可编辑") = True


然后在项目的CurrentTableChanged事件中,代码如下:
Select Case CurrentTable.Name
Case "表A.表B"
CurrentTable.AllowEdit = RightTb.AllowEdit = true
End select 

但问题出来了。用户登录之后打开系统,点了Link("业务01")
 Tables("表A")确实是象预想的一样,被锁定了。
但是它的子表 Tables("表A.表B")并没有跟预想的一样被锁定,还可以增删改。

我把鼠标停在表A.表B里,用命令窗口写了
output.show(RightTb.Name)  \'显示结果为表A,说明全局代码确实打开的是表A
output.show(RightTb.AllowEdit)  \'显示结果为False,说明表A确实被锁定了
output.show(CurrentTable.Name)  \'显示结果为表A.表B,说明当前表确实是子表
output.show(tables("表A.表B").AllowEdit)  \'显示结果为true,说明子表并未被锁定 ——————这是怎么回事呢,项目管理的CurrentTableChanged事件不起作用吗?
[此贴子已经被作者于2014-4-17 21:07:36编辑过]

--  作者:有点甜
--  发布时间:2014/4/17 21:08:00
--  

呃,语法错了,这样写吧?

 

CurrentTable.AllowEdit = RightTb.AllowEdit

 

CurrentTableChanged里 msgbox 看一下是否进去执行了。


--  作者:chnfo
--  发布时间:2014/4/17 21:17:00
--  
Select Case CurrentTable.Name
    Case "表A.表B"    
        CurrentTable.AllowEdit = RightTb.AllowEdit
        MessageBox.Show("进来执行了吗?")
End Select

改了一下,但在切换当前表时,没有任何弹出框,说明
        MessageBox.Show("进来执行了吗?")  -----它没有被执行!!!

Why?


    Case "表A.表B"     \'Sorry,习惯了做窗口表,把这里写成了表A_表B,现在可以执行了,灰常感谢有点苦指教 。

不过,效果有一点点小小欠佳,就是只有切换到子表的时候,才能显示表左上角的那个锁形。
[此贴子已经被作者于2014-4-17 21:29:58编辑过]

--  作者:jianjingmaoyi
--  发布时间:2014/4/17 21:33:00
--  
可以锁定行 表事件有专门的锁定行表事件  


DataRowLockedChanged

行的锁定状态改变后执行。

e参数属性: 

DataTable:返回锁定行所在数据表。
DataRow: 返回锁定行。

示例

假定订单和订单明细表已经建立关联,希望锁定某订单时,能同时锁定其对应的全部订单明细,反之亦然。
要实现此目的,只需将订单表的DataRowLockedChanged事件代码设置为:

For Each dr As DataRow In e.DataRow.GetChildRows("订单明细")

dr.Locked = e.DataRow.Locked

Next


--  作者:chnfo
--  发布时间:2014/4/17 21:42:00
--  
非常感谢提醒,我的本意是锁定整个表不让编辑,但允许查看。

接下来还要做锁定主表行的同时,锁定明细的功能。