以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于列多值字段筛选自动输入问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=153234)

--  作者:jhxb8821
--  发布时间:2020/8/4 15:36:00
--  关于列多值字段筛选自动输入问题
我有两个表,一个“员工”表,一个“活动表”。“活动表”有四列:活动一参与、活动二参与、活动三参与、剩余人员。能否实现以下人员输入设想:只需要在活动一参与列中输入人员姓名,剩余人员在剩余人员列显示;在活动二参与列中输入人员姓名,剩余人员在剩余人员列中自动减少;在活动三参与列中输入人员姓名,剩余人员在剩余人员列中自动减少。敬请指教,怎么写代码来实现
--  作者:jhxb8821
--  发布时间:2020/8/4 15:46:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2020.table


--  作者:y2287958
--  发布时间:2020/8/4 16:09:00
--  
Dim 集合1 As List(of String) = DataTables("员工").GetValues("姓名")
Select Case e.DataCol.Name
    Case "活动一参与"
        Dim 集合2 As new List(of String)
        If e.NewValue IsNot Nothing Then 集合2.AddRange(e.NewValue.split(","))
        集合2.AddRange(e.DataRow("活动二参与").split(","))
        集合2.AddRange(e.DataRow("活动三参与").split(","))
        e.DataRow("剩余人员") = String.join(",",(集合1.Except(集合2)).ToArray)
    Case "活动二参与"
        Dim 集合2 As new List(of String)
        If e.NewValue IsNot Nothing Then 集合2.AddRange(e.NewValue.split(","))
        集合2.AddRange(e.DataRow("活动一参与").split(","))
        集合2.AddRange(e.DataRow("活动三参与").split(","))
        e.DataRow("剩余人员") = String.join(",",(集合1.Except(集合2)).ToArray)
    Case "活动三参与"
        Dim 集合2 As new List(of String)
        If e.NewValue IsNot Nothing Then 集合2.AddRange(e.NewValue.split(","))
        集合2.AddRange(e.DataRow("活动一参与").split(","))
        集合2.AddRange(e.DataRow("活动二参与").split(","))
        e.DataRow("剩余人员") = String.join(",",(集合1.Except(集合2)).ToArray)
End Select
[此贴子已经被作者于2020/8/4 16:18:31编辑过]

--  作者:有点蓝
--  发布时间:2020/8/4 16:21:00
--  
If e.DataCol.Name Like "*参与" Then
    Dim s As String = ""
    For Each dc As DataCol In e.DataTable.DataCols
        If dc.Name Like "*参与" Then
            s = s & "," & e.DataRow(dc.Name)
        End If
    Next
    If s > "" Then
        s = s.Trim(",").Replace(",","\',\'")
        e.DataRow("剩余人员") = DataTables("员工").GetComboListString("姓名","姓名 not in(\'" & s & "\')").replace("|",",")
    Else
        e.DataRow("剩余人员") = DataTables("员工").GetComboListString("姓名").replace("|",",")
    End If
End If

--  作者:jhxb8821
--  发布时间:2020/8/4 17:45:00
--  好
老师,但这样活动1-3参与,人员有重复,能否不能重复,怎么修改


--  作者:jhxb8821
--  发布时间:2020/8/4 17:52:00
--  非常感谢
非常感谢
--  作者:有点蓝
--  发布时间:2020/8/4 20:08:00
--  
重复按照之前的方法排除,用法都差不多。