Foxtable(狐表)用户栏目专家坐堂 → [求助]移除符合条件的列


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

主题:[求助]移除符合条件的列

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


加好友 发短信
等级:六尾狐 帖子:1385 积分:10673 威望:0 精华:0 注册:2013/11/8 15:27:00
[求助]移除符合条件的列  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/11 16:36:00 [只看该作者]

请上传实例测试

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


加好友 发短信
等级:六尾狐 帖子:1385 积分:10673 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2023/10/11 16:41:00 [只看该作者]

不太方便上传实例呢

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


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/11 16:58:00 [只看该作者]

新建项目做个同样问题的例子

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


加好友 发短信
等级:六尾狐 帖子:1385 积分:10673 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2023/10/11 20:56:00 [只看该作者]

去掉For i As Integer = 0 To dt8.Cols.Count Step - 1中的step后可以,但提示以下错误信息
索引超出范围。必须为非负值并小于集合大小。
参数名: index

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


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/12 8:29:00 [只看该作者]

For i As Integer = 0 To dt8.Cols.Count - 1

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


加好友 发短信
等级:六尾狐 帖子:1385 积分:10673 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2023/10/12 8:42:00 [只看该作者]

提示以下错误信息
索引超出范围。必须为非负值并小于集合大小。
参数名: index

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


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/12 9:06:00 [只看该作者]

调试技巧:http://www.foxtable.com/webhelp/scr/1485.htm,看哪一句代码出错

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2023/10/12 9:51:00 [只看该作者]

For i As Integer = dt8.Cols.Count to 0 Step - 1
删了除行列要倒着从后面往前删,因为每删除一次.Count属性在不断发生变化,顺着删后面的就找不着了!

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


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/12 10:25:00 [只看该作者]

For i As Integer = dt8.Cols.Count - 1 to 0 Step - 1

 回到顶部
总数 12 1 2 下一页