Foxtable(狐表)用户栏目专家坐堂 → 锁定单元格,并且保证其不被修改删除


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

主题:锁定单元格,并且保证其不被修改删除

美女呀,离线,留言给我吧!
采菊东篱下
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
锁定单元格,并且保证其不被修改删除  发帖心情 Post By:2021/8/18 14:34:00 [只看该作者]

  比如会计科目,它是规定不变的,凡系统原来的一级科目代码、一级科目名称都要保护其不被修改删除,但用户后期添加的一级科目代码、一级科目名称及其一级以下的科目代码、科目名称允许修改、删除,除科目代码、科目名称外的列都允许修改,我这样写
Dim r As DataRow = DataTables(vars("a")).Find("len(e.Row("科目代码")) = 4")
If e.Col.Name = "科目代码" OrElse e.Col.Name = "科目名称" Then
     e.Continue = False
End If
只是不允许其修改,但可以强行删除,如何做到保护它们不允许修改、删除,用AllowLockRow、Locked变成锁行,其他列想录入数据又不行了,这里只锁定符合条件的单元格,对了AllowLockRow、Locked两者有什么区别

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/18 15:02:00 [只看该作者]

prepareedit事件

If e.Col.Name = "科目代码" OrElse e.Col.Name = "科目名称" Then
     if e.row.isnull("科目代码") = false andalso e.row("科目代码").length = 4 then
e.cancel=true
end if
End If

不允许删除到BeforeDeleteDataRow事件处理

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/8/18 15:56:00 [只看该作者]

在BeforeDeleteDataRow事件中这样写报错:

图片点击可在新窗口打开查看此主题相关图片如下:22.png
图片点击可在新窗口打开查看
If e.DataCol.Name = "科目代码" OrElse e.DataCol.Name = "科目名称" Then
    If User.Type <> UserTypeEnum.Developer
        e.cancel = True
    End If
End If

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/18 16:19:00 [只看该作者]


BeforeDeleteDataRow

删除一行之前执行,可以在此处进行权限或逻辑验证,如果通不过验证,则撤销此次删除行操作。

e参数属性: 

DataTable:返回要删除行的数据表。
DataRow:  返回要删除的数据行。
Cancel:    逻辑型,设为True,取消删除行操作。
Continue: 逻辑型,设为False,取消后续删除行操作。

示例


 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10374 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2021/8/18 21:04:00 [只看该作者]

BeforeDeleteDataRow
If User.Type <> UserTypeEnum.Developer And e.DataRow("操作人姓名").StartsWith = "开发者" And (e.DataRow("科目代码") OrElse e.DataRow("科目名称")) Then
    e.Cancel = True
End If
这是取消删除行,如果同时设置不允许删除列呢?
[此贴子已经被作者于2021/8/19 11:47:17编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/19 8:43:00 [只看该作者]

删除列是开发功能,发布后就没有的,正常不需要考虑这个。

 回到顶部