以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]窗口中的下拉列表的筛选  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=55277)

--  作者:蝙蝠侠K02
--  发布时间:2014/8/13 16:34:00
--  [求助]窗口中的下拉列表的筛选

      我在窗口中添加一个查询表,该查询表用FILL的方法从“用户表”在打开窗口时只加载表结构。

      同时,在窗口添加一个组合框,点击组合框,下拉列表的数据项为“部门名称”,选中其中“部门名称”,

从“用户表”按“部门名称”进行加载该部门下的用户。组合框的SelectedIndexChanged代码如下,系统代码出错,

提示“至少缺一个参数”。我知道是And 用户姓名 not In (" & ids & ") 有问题,去掉此句,一切正常。

      但我想将ids 出现过的用户过滤掉,不知如何去做?

 

With DataTables("人员添加窗口2_Table1")

    Dim ids As String  = Vars("checkeduser")

   If ids > " " Then

        .LoadFilter = "部门名称 = \'" & e.Sender.Value & "\' And 用户姓名 not In (" & ids & ") "

        .Load()

    Else

        .LoadFilter = "部门名称 = \'" & e.Sender.Value & "\'"

        .Load() 

    End If

End With


--  作者:有点甜
--  发布时间:2014/8/13 16:37:00
--  

你的ids生成有问题。

 

你的ids必须是这种形式的,比如 idx = "\'AAAA\',\'BBB\',\'CCC\'"

 

用户姓名 not In (" & ids & ")

 


--  作者:蝙蝠侠K02
--  发布时间:2014/8/13 17:15:00
--  

       生成IDS 的代码如下:

 

Dim ids As String

With Tables("用户选择临时表")

        For Each dr As Row In .Rows

        ids = ids & "," & dr("用户姓名")

        Next

        ids= ids.Trim(",")

        If Forms("新建任务窗口").Opened Then

            Dim s As String = Vars("fn")

            Select Case s

                Case 1 \'责任人

                    Dim tx As WinForm.TextBox = Forms("新建任务窗口").Controls("TextBox4")

                    tx .Value  = ids

                Case 2 \'参与人

                    Dim tx As WinForm.TextBox = Forms("新建任务窗口").Controls("TextBox5")

                    tx .Value  = ids

             End Select

        End If

        Vars("checkeduser") = Vars("checkeduser") & "," & ids   \'将本次已选用户加入已选用户变量中

        Vars("checkeduser")= Vars("checkeduser").Trim(",")

  End With


--  作者:有点甜
--  发布时间:2014/8/13 17:19:00
--  

改一下

 

        For Each dr As Row In .Rows

            ids = ids & "\'" & dr("用户姓名") & "\',"

        Next

        ids= ids.Trim(",")


--  作者:有点甜
--  发布时间:2014/8/13 17:21:00
--  

或者,你前面不用改,你最后的代码改一下

 

With DataTables("人员添加窗口2_Table1")

    Dim ids As String  = Vars("checkeduser")

   If ids > " " Then

        .LoadFilter = "部门名称 = \'" & e.Sender.Value & "\' And 用户姓名 not In (\'" & ids.Replace(",", "\',\'") & "\') "

        .Load()

    Else

        .LoadFilter = "部门名称 = \'" & e.Sender.Value & "\'"

        .Load() 

    End If

End With


--  作者:蝙蝠侠K02
--  发布时间:2014/8/13 17:59:00
--  

   按4楼 我试了一下,出现‘张三’,,’李四’,重复(,,)

我将ids = ids & "\'" & dr("用户姓名") & "\'," 改为ids = ids & "\'" & dr("用户姓名") "\'",

只出现一个(,),但试一下,还是不行。

 

  我再试一下5楼的代码


--  作者:蝙蝠侠K02
--  发布时间:2014/8/13 18:27:00
--  
      我试了一下5楼的代码,系统不报错了,但仍没有将已有的用户(IDS中)过滤掉,请甜老师再看一下!
--  作者:有点甜
--  发布时间:2014/8/13 19:13:00
--  

 回复7楼,没有理由,例子发上来

 

 你msgbox(DataTables("人员添加窗口2_Table1").LoadFilter)看看条件是否设置正确。


--  作者:蝙蝠侠K02
--  发布时间:2014/8/14 9:45:00
--  

    我又试了一下。可以了,谢谢!

    我还有一个问题,我想将如下ids 变成\'AAAA\',\'BBB\',\'CCC\',怎么写代码?

     dim idx as string = AAAA,BBB,CCC


--  作者:有点甜
--  发布时间:2014/8/14 9:56:00
--  
 idx.Replace("\'", "")