以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  模糊筛选过滤的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=51931)

--  作者:scott518
--  发布时间:2014/6/5 19:14:00
--  模糊筛选过滤的问题

\'按输入的值模糊筛选
Dim txt As String = e.Form.Controls("TextBox1").Text
Dim tbl As Table = Tables(e.form.name & "_Table1")
If txt > "" Then
    txt = "\'*" & txt & "*\'"
    txt =  "规格 Like " & txt & " Or 日期 Like " & txt & " Or 数量 Like " & txt & " Or 产品名称 Like " & txt & " Or 产品规格 Like " & txt & " Or 工序名称 Like " & txt
    tbl.filter = txt
Else
    tbl.Filter = ""
End If

上面是模糊查找的文本框

TextChanged通用代码,有以下两个问题请教:

1、上述代码如果字段全部是字符型数据没问题,如果还要包括日期或数值字段模糊查找要怎么写才能通用?

2、用户的规格列类似:2.0*1.0*152,因为当中有“*”号,当在查找框中输入*号时就会提示出错,要怎么办?

 

谢谢!


--  作者:有点甜
--  发布时间:2014/6/5 19:16:00
--  
Dim txt As String = e.Form.Controls("TextBox1").Text
Dim tbl As Table = Tables(e.form.name & "_Table1")
If txt > "" Then
    txt = "\'*" & txt.Replace("*", "[*]") & "*\'"
    txt =  "规格 Like " & txt & " Or 日期 Like " & txt & " Or 数量 Like " & txt & " Or 产品名称 Like " & txt & " Or 产品规格 Like " & txt & " Or 工序名称 Like " & txt
    tbl.filter = txt
Else
    tbl.Filter = ""
End If
--  作者:scott518
--  发布时间:2014/6/5 20:17:00
--  

谢谢!第二个问题是可以了,

请问第一个问题呢,如果有日期或数值字段时出现类似下面的错误提示:

“无法在 System.Double 和 System.String 上执行“Like”操作。”

 

是不是在同一个文本框中只能用字符不能用日期和数字字段来实现这样的模糊查找,因为like不支持,有无其他方法解决这个?

 


--  作者:有点甜
--  发布时间:2014/6/5 20:19:00
--  
txt =  "规格 Like " & txt & " Or Convert(日期, \'System.String\') Like " & txt & " Or 数量 Like " & txt & " Or 产品名称 Like " & txt & " Or 产品规格 Like " & txt & " Or 工序名称 Like " & txt

 


--  作者:scott518
--  发布时间:2014/6/5 20:23:00
--  
谢谢,原来是要转换一下。
--  作者:scott518
--  发布时间:2014/6/6 16:36:00
--  

因为加入了日期,和数值列,模糊筛选总提示这个错误:


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

 

代码如下:

If txt > "" Then
    txt = "\'%" & txt.Replace("*","[*]") & "%\'"
    Dim dr As DataRow = DataTables("QtbSet").Find("WinN = \'" & args(0) & "\' and SearchCols is not null") \'获取模糊查找筛选列
    If dr IsNot Nothing Then
        Dim flt,flt2 As String
        Dim Cols() As String = dr("SearchCols").split(",")  ’有这些列:供应商,产品编码,采购数量,采购日期
        For i As Integer = 0 To Cols.Length -1
            If flt > "" Then
                flt = flt & " or "
            End If
            If tbl.Cols(i).IsNumeric OrElse tbl.Cols(i).IsDate Then  ‘如果是数值列或日期列
                flt = flt & " Convert(Cols(i),\'System.String\') like " & txt  \'将数值或日期转换为字符
            Else
                flt = flt & Cols(i) & " like " & txt
            End If
        Next
        tbl.filter = flt
    Else
        tbl.filter = ""
    End If
End If


写代码时没提示错误,问题出在哪里?

 

谢谢!


--  作者:Bin
--  发布时间:2014/6/6 16:37:00
--  
flt = flt & " Convert(" & tbl.Cols(i).Name & ",\'System.String\') like " & txt 
[此贴子已经被作者于2014-6-6 16:37:34编辑过]

--  作者:scott518
--  发布时间:2014/6/6 17:24:00
--  
谢谢BIN!