以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 怎么找出适合多个场所应用的产品呢?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=129776)

--  作者:龙潭春早
--  发布时间:2019/1/5 22:08:00
--  [求助] 怎么找出适合多个场所应用的产品呢?

1)任务

           一个产品有好多个应用场所,可能有几十个、上百个。

           通过多值字段,给每个产品都添加了这样的属性。

           现在,想要找出其中适合多个场所的所有产品,比如适用于十几个、二十几个场所的。

图片点击可在新窗口打开查看此主题相关图片如下:应用场所 - 用多值字段,多选输入了所有场所.png
图片点击可在新窗口打开查看


2)设计

           在窗口中,用 CheckedListBox 多选了这些场所。

           但是,想不好代码应该怎么写了,请大神们帮帮忙。

图片点击可在新窗口打开查看此主题相关图片如下:应用场所 - 想根据场所,筛选出所有适用的产品.png
图片点击可在新窗口打开查看




--  作者:有点甜
--  发布时间:2019/1/6 21:16:00
--  

合成这样的条件,如

 

"应用场所 like \'%酒店%\' or 应用场所 like \'%餐厅%\' or 应用场所 like \'%快餐%\'"

 

写代码这样写,如

 

Dim str As String = "酒店,餐厅"
Dim filter As String = ""
If str > "" Then
    For Each s As String In str.split(",")
        filter &= " or 应用场所 like \'%" & s & "%\'"
    Next
End If
filter = filter.SubString(3)
msgbox(filter)


--  作者:龙潭春早
--  发布时间:2019/1/7 15:43:00
--  
【1】上面 1楼 的第二张图是示意性的,表示 随机的选取几个应用场所找出(筛选出)同时适用于这些场所的所有产品

【2】试着写了一段代码,还是觉得不对,语法也有问题。

       甜老师能根据以下意思,给出一套代码吗?

\' 2. 将窗口确认按钮的 Clik 事件代码设置为:

\'   2.1 \' * 定义

Dim ckl As WinForm.CheckedListBox = Forms("窗口A").Controls("CheckedListBox1")

Dim plcs As New List(of String)

\'   2.2 \' * 获取已经勾选的项目

For i As Integer = 0 To ckl.Items.count - 1

    If ckl.GetItemChecked(i) Then

        plcs.Add(ckl.Items(i)) \'* 将选中的项目名(即应用场所名)赋值给plcs字符串集合

    End If

Next

\'   2.3 \' * 提示

If plcs.Count = 0 Then

    MessageBox.Show("至少要选择一项","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)

    Return

End If

 

\'   2.4 \' * 设置产品的(应用场所)过滤条件

Dim filter As String = ""

\'  If plcs > "" Then

For Each plc As String In plcs \'* 遍历应用场所集合

    filter & = " and 应用场所 like \'%" & plc & "%\'"

Next

End If

 

这里,还应该有一个 filter 和"应用场所"的比较代码吧?怎么写呢?

 

Tables("表C").filter = filter


[此贴子已经被作者于2019/1/7 15:47:57编辑过]

--  作者:有点甜
--  发布时间:2019/1/7 16:10:00
--  

Dim str As String = Forms("窗口A").Controls("CheckedListBox1").Value
Dim filter As String = ""
If str > "" Then
    For Each s As String In str.split(",")
        filter &= " or 应用场所 like \'%" & s & "%\'"
    Next
End If
filter = filter.SubString(3)
msgbox(filter)

Tables("表C").filter = filter


--  作者:龙潭春早
--  发布时间:2019/1/7 17:05:00
--  
1)是要 找出同时适用于这些场所的所有产品
   
     那么,下面的 or,是不是要改成 “ and ”?

           filter &= " or 应用场所 like \'%" & s & "%\'"

2)代码中的 SubString(3),是什么意思呢?

3)没查到 msgbox,能给说明一下吗?

--  作者:有点甜
--  发布时间:2019/1/7 17:14:00
--  

Dim str As String = Forms("窗口A").Controls("CheckedListBox1").Value
Dim filter As String = ""
If str > "" Then
    For Each s As String In str.split(",")
        filter &= " and 应用场所 like \'%" & s & "%\'"
    Next
End If
filter = filter.SubString(4)
msgbox(filter)

Tables("表C").filter = filter

 

http://www.foxtable.com/webhelp/scr/0240.htm

 


--  作者:龙潭春早
--  发布时间:2019/1/7 19:36:00
--  
甜老师,好像有些不对。

应该是把 1楼 中第二张图通过 CheckedListBox 选中的使用场所,和第一张图 通过 多值字段给 “应用场所” 列中之前赋予的各个场所进行比较。

如果多值字段 “应用场所” 列中的场所,包含了 CheckedListBox 选中的所有使用场所,则显示这些行; 否则,不显示。

这个要怎么实现呢?

--  作者:有点蓝
--  发布时间:2019/1/7 20:35:00
--  
就是6楼的用法。
--  作者:龙潭春早
--  发布时间:2019/1/7 22:58:00
--  
嗯 好用!

谢谢啦!!!

--  作者:龙潭春早
--  发布时间:2019/1/9 15:12:00
--  
1)找出了同时适用于几个场所的所有产品,但是同一种产品会有很多的品牌和型号。

      想在 6楼 代码的基础上,再进一步地找出这些产品中的某些型号。

图片点击可在新窗口打开查看此主题相关图片如下:应用场所 - 进一步选出产品型号.png
图片点击可在新窗口打开查看


2)在 6楼 代码最后,再加上筛选代码: 

Dim str As String = Forms("窗口A").Controls("CheckedListBox1").Value
Dim filter As String = ""
If str > "" Then
    For Each s As String In str.split(",")
        filter &= " and 应用场所 like \'%" & s & "%\'"
    Next
End If
filter = filter.SubString(4)
msgbox(filter)


Tables("表C").filter = filter And "型号选择 = True"



3)显示错误:

.NET Framework 版本:2.0.50727.8762
Foxtable 版本:2018.10.9.1
错误所在事件:窗口,窗口A,型号选择,Click
详细错误信息:
从字符串“ 应用场所 like \'%酒店%\' and 应用场所”到类型“Long”的转换无效。
输入字符串的格式不正确。


这里随机选择了酒店等几个场所

4)怎么修改好呢?