以文本方式查看主题 - 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:返回锁定行所在数据表。 示例 假定订单和订单明细表已经建立关联,希望锁定某订单时,能同时锁定其对应的全部订单明细,反之亦然。 For Each dr As DataRow In e.DataRow.GetChildRows("订单明细") dr.Locked = e.DataRow.Locked Next |
-- 作者:chnfo -- 发布时间:2014/4/17 21:42:00 -- 非常感谢提醒,我的本意是锁定整个表不让编辑,但允许查看。 接下来还要做锁定主表行的同时,锁定明细的功能。
|