Foxtable(狐表)用户栏目专家坐堂 → [求助]如何在锁定主表时锁定子表


  共有6602人关注过本帖树形打印复制链接

主题:[求助]如何在锁定主表时锁定子表

帅哥哟,离线,有人找我吗?
chnfo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]如何在锁定主表时锁定子表  发帖心情 Post By:2014/4/17 16:25:00 [只看该作者]

我用了导航,通过权限的设定锁定了主表,但如何同时锁定子表呢?

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/4/17 16:33:00 [只看该作者]

一样的啊.和锁定主表的代码一致的

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2014/4/17 16:38:00 [只看该作者]

解释一下咯,我是希望主表锁定之后,子表自动锁定。因为我现在的代码只锁定了主表 现在,并不是听有表都有子表
[此贴子已经被作者于2014-4-17 16:39:19编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/4/17 16:52:00 [只看该作者]

自己设计一个锁定按钮.  

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



 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/17 16:58:00 [只看该作者]

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

 

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

 

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

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

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/17 21:08:00 [只看该作者]

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

 

CurrentTable.AllowEdit = RightTb.AllowEdit

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By: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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:760 积分:4714 威望:0 精华:0 注册:2011/12/17 18:37:00
  发帖心情 Post By: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
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2014/4/17 21:42:00 [只看该作者]

非常感谢提醒,我的本意是锁定整个表不让编辑,但允许查看。

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

 回到顶部