以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  listview如何实现组合选择输入条件,进行数据的筛选图示化呢?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=158913)

--  作者:李孝春
--  发布时间:2020/12/7 12:47:00
--  listview如何实现组合选择输入条件,进行数据的筛选图示化呢?
listview如何实现组合选择输入条件(单位名称  支部名称选择值后),进行数据的筛选图示化呢?

单位名称控件enter事件代码如下:
Dim cmb As WinForm.ComboBox = e.form.Controls("ComboBox1")
cmb.ComboList = DataTables("党员信息").sqlGetComboListString("单位名称")

支部名称控件enter事件代码如下:
Dim cmb As WinForm.ComboBox = e.form.Controls("ComboBox1")
Dim cmb2 As WinForm.CheckedComboBox = e.Form.Controls("CheckedComboBox1")
cmb2.ComboList = DataTables("党员信息").sqlGetComboListString("支部名称","单位名称=\'"& cmb.SelectedValue & "\'")

生成模式1按钮事件代码如下:
Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
lvw.StopRedraw() \'暂停绘制
lvw.Rows.Clear() \'清除原来的行
lvw.Images.Clear() \'清除原来的图片
lvw.View = ViewMode.LargeIcon \'显示模式为大图标
lvw.Images.AddLargeImage("Man", "Man48.ico") \'添加代表男性的一对图标
lvw.Images.AddLargeImage("Woman", "Woman48.ico") \'添加代表女性的一对图标
For Each zh As String In DataTables("党员信息").GetValues("支部名称") \'增加分组
    Dim grp As WinForm.ListViewGroup = lvw.Groups.Add()
    grp.Name = zh
    grp.Text = zh
Next
For Each dr As DataRow In DataTables("党员信息").DataRows \'从数据表中提取数据
    Dim vr As  WinForm.ListViewRow =  lvw.Rows.Add() \'增加一行
    vr.Text = dr("姓名")  \'设置标题
    If dr("性别") = "男" Then \'设置分组
        vr.ImageKey = "Man"
    Else
        vr.ImageKey = "Woman"
    End If
vr.Group = dr("支部名称") \'指定所属分组
Next
lvw.ResumeRedraw() \'恢复绘制

当前运行图如下(系直接点击生成模式1得到的数据)

图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看

在生成模式1中事件代码加入如下内容(初步实现先进行数据筛选,然后在生成listview内容,可以实现单个单位和单个支部名称的数据筛选,如何实现多个支部名称或者多个单位名称的数据筛选呢?麻烦老师们指导一下更加快捷高效的代码写法,谢谢!)
Dim Filter As String
With e.Form.Controls("单位名称")
    If .Value IsNot Nothing Then
        Filter = "单位名称 = \'" & .Value & "\'"
    End If
End With
With e.Form.Controls("支部名称")
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "支部名称 = \'" & .Value & "\'"
    End If
End With

If Filter > "" Then
    DataTables("党员信息").loadFilter= Filter
    DataTables("党员信息").load
End If
[此贴子已经被作者于2020/12/7 13:28:20编辑过]

--  作者:有点蓝
--  发布时间:2020/12/7 13:33:00
--  
改为多选组合框:http://www.foxtable.com/webhelp/topics/0940.htm

然后,
Filter = Filter & "支部名称 in (\'" & .Value.replace(",","\',\'") & "\')"
[此贴子已经被作者于2020/12/7 14:36:48编辑过]

--  作者:李孝春
--  发布时间:2020/12/7 13:44:00
--  回复:(有点蓝)改为多选组合框:http://www.foxtabl...
老师 还得麻烦你一下哦   更改后运行效果如下:没有显示生成出数据并listview显示出来

图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看


支部名称在表里面一个党员只能对应一个支部   在多选组合框这里先选择单位后 会把当前单位的所有支部名称显示出来  如果选择了第一 第二支部  想实现这两个支部的数据进行筛选显示 

按楼上操作后,如果我只选一个支部  则可以进行筛选显示  如果我选择两个支部   因为在表中支部名称不是多值字段,所以筛选不到合格数据,需要把多选组合框里面的多值进行拆分  然后一个个的去筛选符合支部名称值的数据
[此贴子已经被作者于2020/12/7 13:51:25编辑过]

--  作者:有点蓝
--  发布时间:2020/12/7 13:56:00
--  
仔细看2楼代码
--  作者:李孝春
--  发布时间:2020/12/7 14:03:00
--  回复:(有点蓝)仔细看2楼代码
代码如下  还是提示查不着数据  麻烦老师啦
Dim Filter As String
With e.Form.Controls("单位名称")
    If .Value IsNot Nothing Then
        Filter = "单位名称 = \'" & .Value & "\'"
    End If
End With
With e.Form.Controls("支部名称")
    If .Value IsNot Nothing Then
        If Filter > "" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "支部名称 in (\'" & .Value.replace("\'","\',\'") & "\')"
        MessageBox.Show(Filter)
    End If
End With

If Filter > "" Then
    DataTables("党员信息").loadFilter= Filter
    DataTables("党员信息").load
End If

麻烦老师指导下  进入窗口后在党员信息按钮里面 谢谢

以下内容是专门发给有点蓝浏览



[此贴子已经被作者于2020/12/7 14:18:03编辑过]

--  作者:有点蓝
--  发布时间:2020/12/7 14:37:00
--  
搞错了,是逗号

Filter = Filter & "支部名称 in (\'" & .Value.replace(",","\',\'") & "\')"
[此贴子已经被作者于2020/12/7 14:37:07编辑过]