以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何合并上下两列的值并去除重复值?已解决!  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=24180)

--  作者:zpx_2012
--  发布时间:2012/10/6 23:12:00
--  如何合并上下两列的值并去除重复值?已解决!

各位老师,

 

如下图:

 


图片点击可在新窗口打开查看此主题相关图片如下:360截图20121006-002.jpg
图片点击可在新窗口打开查看


 

想将上下两列的字符串合并成一个新的字符串去掉重复的值

 

新字符串为:“录入日期/入库类别/入库单号/仓库/仓管员/录入”

 

代码要怎么写?

 

谢谢!

 

[此贴子已经被作者于2012-10-7 14:21:50编辑过]

--  作者:程兴刚
--  发布时间:2012/10/6 23:25:00
--  

知道您想干啥,其实您没必要考虑他,代码循环执行,设置这两行包含的列名称的列的可见属性即可,大不了部分列重复设置一次,啥也感觉不出来!

[此贴子已经被作者于2012-10-6 23:25:32编辑过]

--  作者:zpx_2012
--  发布时间:2012/10/6 23:39:00
--  

程版太牛了,果真看出我的意图,现在的问题是同一张单不同的角色的权限不一样,但同一个用户同时具有这几种角色,所以想把它们合并在一起,即每一个角色的权限他都有,我用了如下代码,但只能随机的得到其中的一个角色的权限,满足不了要求,请指点,谢谢!

 

 \'将角色转化成in可以调用的格式
    Dim R As String = "\'" & MyRole.replace(",","\',\'") & "\'"
   \'从授权表中集合当前用户能查看及编辑的表
    Dim drs As List(Of DataRow)
    drs = DataTables("授权表").Select("[表名] = \'" & e.Node.Text & "\' And [部门] = \'" & MyGroup & "\'And [角色] in (" & R & ")")
    If drs IsNot Nothing Then
        \'设置权限
        For Each dr1 As DataRow In drs
            If dr1.IsNull("可编辑列") Then
                Tables(e.Node.Text).AllowEdit = False
            Else
                Tables(e.Node.Text).AllowEdit = True
                For Each c As Col In Tables(e.Node.Text).Cols
                    Dim a As String = c.name
                    If dr1("可查看列").contains(a) Then
                        c.Visible = True
                    Else
                        c.Visible = False
                    End If
                    If dr1("可编辑列").contains(a) Then
                        c.AllowEdit = True
                    Else
                        c.AllowEdit = False
                    End If
                Next
            End If
        Next
    End If

 


--  作者:程兴刚
--  发布时间:2012/10/7 9:19:00
--  

1、项目属性的AfterOpenProject事件代码添加这一段:

 

For Each t As Table In Tables
    t.Visible = False
    t.AllowEdit = False
    For Each c As Col In t.Cols
        c.Visible = False
        c.AllowEdit =  False
    Next
Next
   \'上面的代码用于打开系统后立即隐藏和禁止所有表、列

 

2、自定义函数"授权"代码:

 

For Each t As Table In Tables
    t.Visible = False
    t.AllowEdit = False
    For Each c As Col In t.Cols
        c.Visible = False
        c.AllowEdit =  False
    Next
Next

   \'之所以加上前面这一段,才能实现打开系统后切换用户;

   ’下面是我根据系统自带的可视化授权扩展改编的授权表结构后的授权代码
Dim dr As DataRow = DataTables("用户管理").find("sys_部门设置 = \'" & Vars("当前用户") & "\'")
If dr IsNot Nothing
    If  dr("管理权限") = "超级管理员"
        For Each t As Table In Tables
            If left(t.name,4) <> "sys_"
                t.Visible = True
                t.AllowEdit = True
                For Each c As Col In t.Cols
                    If left(c.name,4) <> "sys_"
                        c.Visible = True
                        c.AllowEdit =  True
                    End If
                Next
            End If
        Next
        Return Nothing
    End If
    For Each dr In DataTables("sys_授权").Select("sys_部门设置 = \'" & Vars("当前用户") & "\' and 授权类别 = \'表授权\'","_SortKey")
        If dr IsNot Nothing
            If dr.IsNull("表名称") = False
                Tables(dr("表名称")).Visible =  True
                Tables(dr("表名称")).AllowEdit = True
                Dim Values() As String
                If  dr.IsNull("列名称") = False
                    Values = dr("列名称").split(",")
                    For Index As Integer = 0 To Values.Length - 1
                        Tables(dr("表名称")).cols(Values(Index)).Visible = dr("可视")
                        Tables(dr("表名称")).cols(Values(Index)).AllowEdit = dr("编辑")
                    Next
                End If
            End If
        End If
    Next
Else
    MessageBox.show("对不起,系统没有对您授权,请联系系统管理员对您进行授权!")
End If

 

3、登录系统按钮的代码检测密码成功,所执行的代码的最后一行加上调用函数"表授权"的代码:

 

 Functions.Execute("表授权")

注:授权表表结构改成了如下形式(您现在可以看到,我的授权表的第二、三行,程军仅可以对人事管理中的人员基本信息进行查看,仅对“工资等级”可以编辑,而这两行均包含了“工资等级”):

 

 


此主题相关图片如下:未命名.jpg
按此在新窗口浏览图片

 

至于您的问题,根据上述思路摸索,实在再解决不了,我只有在看到您的示例文件后才可以判定和解决。


--  作者:zpx_2012
--  发布时间:2012/10/7 10:23:00
--  
谢谢程版,总算明白了你说的部份列重复执行的意思,调整了一下原来的代码,去掉了中间的两个else可以了。
[此贴子已经被作者于2012-10-7 14:20:42编辑过]

--  作者:chnfo
--  发布时间:2012/10/8 11:43:00
--  
看了这个例子,有点疑问,请教一下。
如图所示,第二行中“程军”的“工资等级”是不可编辑的,而第三行中“程军”的“工资等级”是可编辑的。

综合来看,程军这个用户的“工资等级”又可编辑,又不可编辑。

从实际应用场景来看,程军这个用户,工资等级应当是可编辑的才对。

--  作者:程兴刚
--  发布时间:2012/10/8 12:19:00
--  
以最后设置为准嘛!这一点您都看不明白?
--  作者:程兴刚
--  发布时间:2012/10/8 12:20:00
--  
N个false之后,只要最后为true,肯定是覆盖了以前的设置!
--  作者:程兴刚
--  发布时间:2012/10/8 12:23:00
--  
也就是说,第三行的可编辑只要被选中,该行的可视列也应当自动勾选,这样的话,可编辑的列才会显示出来,不管之前的设置是否可视,到这里都自动覆盖了以前的属性设置!
--  作者:zpx_2012
--  发布时间:2012/10/8 13:11:00
--  

那如果第2行与第3行的位置调换了是不是就变成程军就不可以编辑“工资等级”了。实际中授权表中的行的顺序应该经常会变动的。但我的授权表是采用这种方式的,


此主题相关图片如下:360截图20121008-001.jpg
按此在新窗口浏览图片

用了下面的代码:

                      For Each c As Col In tb.Cols
                            Dim a As String = c.name
                            If dr1("可查看列").contains(a) Then
                                c.Visible = True
                            End If
                            If dr1("可编辑列").contains(a) Then
                                c.AllowEdit = True
                            End If
                        Next

如果同一个用户既是经理又是生管的用户登陆时查看及编辑的权限就是所有行中组合起来的,不知道我说的对不?

但我现在的问题是加载后为什么我的关联表不会显示出来,请老师帮我看一下这贴,

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=24204&page=2

我弄不明白,是不是For Each tb As Table In Tables这样的遍历table不会包括名称为“订单.订单明细”这样的关联表?

谢谢!