以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]移除符合条件的列 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=188689) |
-- 作者:lgj716330 -- 发布时间:2023/10/11 16:32:00 -- [求助]移除符合条件的列 For Each dt8 As Table In Tables For i As Integer = 0 To dt8.Cols.Count Step - 1 Dim strs As String() = _UserRoles.split(",") Dim rs As String For Each ss As String In strs rs = rs & ",\'" & ss & "\'" Next Dim drs11 As List(Of DataRow) = DataTables("列操作权限表").Select("表名 = \'" & dt8.Name & "\' and 列名 like \'%" & dt8.Cols(i).Name & "%\' and (角色 in (" & rs.trim(",") & ") or 角色 = \'" & _UserName & "\') And 不可见=true") Dim drs12 As List(Of DataRow) = DataTables("列操作权限表").Select("表名 = \'" & dt8.Name & "\' and 列名 like \'%" & dt8.Cols(i).Name & "%\' and (角色 in (" & rs.trim(",") & ") or 角色 = \'" & _UserName & "\') And 不可见=false") If drs11.Count > 0 And drs12.Count > 0 Then Tables(dt8.Name).Cols(dt8.Cols(i).Name).Visible = True Else If drs11.Count > 0 And drs12.Count = 0 Then Tables(dt8.Name).Cols.Remove(dt8.Cols(i).Name) End If End If Next Next 某个用户同时有多个角色,在权限表中查找,如果某个角色对某列不可见,但另一个角色又是可见的,只要有一个角色是可见的则该列对该用户为可见;如果针对某列找不到可见的角色但有不可见的角色,则对该用户移除该列(不希望用手动取消隐藏)。其中角色列是单值字段,列名是多值字段。 有试过用其他代码,但发现移除不干净 上面的结果没有生效,求助
[此贴子已经被作者于2023/10/11 16:37:45编辑过]
|
-- 作者:有点蓝 -- 发布时间:2023/10/11 16:36:00 -- 请上传实例测试 |
-- 作者:lgj716330 -- 发布时间:2023/10/11 16:41:00 -- 不太方便上传实例呢 |
-- 作者:有点蓝 -- 发布时间:2023/10/11 16:58:00 -- 新建项目做个同样问题的例子 |
-- 作者:lgj716330 -- 发布时间:2023/10/11 20:56:00 -- 去掉For i As Integer = 0 To dt8.Cols.Count Step - 1中的step后可以,但提示以下错误信息 索引超出范围。必须为非负值并小于集合大小。 参数名: index
|
-- 作者:有点蓝 -- 发布时间:2023/10/12 8:29:00 -- For i As Integer = 0 To dt8.Cols.Count - 1 |
-- 作者:lgj716330 -- 发布时间:2023/10/12 8:42:00 -- 提示以下错误信息 索引超出范围。必须为非负值并小于集合大小。 参数名: index
|
-- 作者:有点蓝 -- 发布时间:2023/10/12 9:06:00 -- 调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错 |
-- 作者:程兴刚 -- 发布时间:2023/10/12 9:51:00 -- For i As Integer = dt8.Cols.Count to 0 Step - 1 删了除行列要倒着从后面往前删,因为每删除一次.Count属性在不断发生变化,顺着删后面的就找不着了!
|
-- 作者:有点蓝 -- 发布时间:2023/10/12 10:25:00 -- For i As Integer = dt8.Cols.Count - 1 to 0 Step - 1 |