以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教加载数据的条件表达式  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=97664)

--  作者:乡里出城
--  发布时间:2017/3/16 14:33:00
--  请教加载数据的条件表达式
想设计一个根据 DataTables("用户权限").DataRow("company")里的公司值(如同一个单元格数据里包含:A公司,B公司,C公司),
然后登陆的用户,根据DataRow("company")的值,只能加载A公司,B公司,C公司的数据,下面写的方法,不知道哪写的不对,请教,谢谢!

Dim Products As List(Of String)
Products = DataTables("用户权限").GetValues("company")
For Each Product As String In Products 
  
Dim sDate As Date = e.form.controls("StartDate").value
Dim eDate As Date = e.form.controls("EndDate").value


For Each dr As DataRow In DataTables("用户权限").Select("\',\' + name + \',\' like \'%," & User.Name &",%\'" )
 If User.Name = dr("name") Then
       DataTables("Finance").LoadFilter = "PayrollMothMsg >= \'" & sDate & "\' And PayrollMothMsg <= \'" & eDate &  "\'and CompanyName like \'%" & Product &  "%\'"
End If
DataTables("Finance").Load()

\'这个位置能成功加载数据,但加载的数据,是全部公司(即除A,B,C以外的公司数据也加载出来),然后再执行下面的语句后,数据就清空了

Next
Next



--  作者:有点色
--  发布时间:2017/3/16 15:57:00
--  


Dim sDate As Date = e.form.controls("StartDate").value
Dim eDate As Date = e.form.controls("EndDate").value

Dim filter As String = "1=2"
Dim ls As new List(Of String)
For Each dr As DataRow In DataTables("用户权限").Select("\',\' + name + \',\' like \'%," & User.Name & ",%\'" )
    For Each s As String In dr("company").split(",")
        If ls.Contains(s) = False Then
            ls.add(s)
            filter &=  " or PayrollMothMsg >= \'" & sDate & "\' And PayrollMothMsg <= \'" & eDate &  "\' and CompanyName like \'%" & s & "%\'"
        End If
    Next
Next
DataTables("Finance").LoadFilter = filter
DataTables("Finance").Load()

 


--  作者:乡里出城
--  发布时间:2017/3/16 16:57:00
--  
谢谢!就是这个Dim filter As String = "1=2" 的写法不是很明白
[此贴子已经被作者于2017/3/16 16:57:40编辑过]

--  作者:有点色
--  发布时间:2017/3/16 17:01:00
--  

1=2 是为了和后面的 or 条件1 or 条件2 合并写的。

 

最后得到 1=2 or 条件1 or 条件2

 

1=2的意思是,永远等于假,那就是不加载任何数据的意思。