以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 锁定单元格,并且保证其不被修改删除 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=171109) |
-- 作者:采菊东篱下 -- 发布时间: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两者有什么区别
|
-- 作者:有点蓝 -- 发布时间: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事件处理
|
-- 作者:采菊东篱下 -- 发布时间:2021/8/18 15:56:00 -- 在BeforeDeleteDataRow事件中这样写报错: If e.DataCol.Name = "科目代码" OrElse e.DataCol.Name = "科目名称" Then If User.Type <> UserTypeEnum.Developer e.cancel = True End If End If
|
-- 作者:有点蓝 -- 发布时间:2021/8/18 16:19:00 -- BeforeDeleteDataRow 删除一行之前执行,可以在此处进行权限或逻辑验证,如果通不过验证,则撤销此次删除行操作。 e参数属性: DataTable:返回要删除行的数据表。 示例 |
-- 作者:采菊东篱下 -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2021/8/19 8:43:00 -- 删除列是开发功能,发布后就没有的,正常不需要考虑这个。 |