以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]关于二个以上checkedComboBox进行组合筛选的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=64338) |
-- 作者:huangfanzi -- 发布时间:2015/2/11 13:23:00 -- [求助]关于二个以上checkedComboBox进行组合筛选的问题 有个“筛选”按钮,有如下代码: Dim FilterPH As String With e.Form.Controls("checkedComboBox_牌号") If .Value IsNot Nothing Then FilterPH = "牌号 In (\'" & .Value.Replace(",", "\',\'") & "\')" End If End With Dim FilterHD As String With e.Form.Controls("checkedComboBox_厚度") If .Value IsNot Nothing Then FilterHD = "厚度 In (\'" & .Value.Replace(",", "\',\'") & "\')" End If End With If FilterPH > "" OrElse FilterHD > "" Then Tables("销售出库明细主窗口_Table_工序合并表_副本").Filter = FilterPH And FilterHD & "and [工序] =\'成品入库\' and [库存标记]=true " End If 执行后,返回:从字符串“牌号 In (\'316L\',\'4J29\',\'4J36\')”到类型“Long”的转换无效。 说明:\'316L\',\'4J29\',\'4J36\'是我任意选择的牌号 谢谢老师
|
-- 作者:huangfanzi -- 发布时间:2015/2/11 13:43:00 -- 上面的问题初步解决了,代码如下: Dim PH As WinForm.CheckedComboBox = e.Form.Controls("checkedComboBox_牌号") Dim HD As WinForm.CheckedComboBox = e.Form.Controls("checkedComboBox_厚度") Tables("销售出库明细主窗口_Table_工序合并表_副本").Filter="牌号 in (\'" & PH.Text.replace(",", "\',\'") & "\') and 厚度 in (\'" & HD.Text.replace(",", "\',\'") & "\')" & "and [工序] =\'成品入库\' and [库存标记]=true " 这段代码有个问题,就是如果有一个CheckedComboBox不选择任何值,代码执行结果会出错,如何改能实现如果不选择就是默认选择了所有项目
|
-- 作者:有点甜 -- 发布时间:2015/2/11 14:24:00 -- 看了一下,即便没有值,也是没有问题。
报什么错? |
-- 作者:huangfanzi -- 发布时间:2015/2/11 14:47:00 -- 甜老师,你可来了,刚才把我急死了,等不急你回复,我自己摸索,还真搞出来了,但不知代码是不是合理。 checkedComboBox_牌号 的ENTER事件 e.Sender.Combolist = "全选" & "|" & DataTables("工序合并表").GetComboListString("牌号" , "[工序] =\'成品入库\' and [库存标记]=true ") checkedComboBox_牌号 的LEAVE事件 If e.Sender.Text.Contains("全选") Then e.Sender.Text = e.Sender.Combolist.Replace("全选","").Replace("|",",").TrimStart(",") End If checkedComboBox_厚度 的ENTER事件 e.Sender.Combolist = "全选" & "|" & DataTables("工序合并表").GetComboListString("厚度" , "[工序] =\'成品入库\' and [库存标记]=true ") checkedComboBox_厚度 的LEAVE事件 If e.Sender.Text.Contains("全选") Then e.Sender.Text = e.Sender.Combolist.Replace("全选","").Replace("|",",").TrimStart(",") End If 筛选按钮的CLICK事件 Dim PH As WinForm.CheckedComboBox = e.Form.Controls("checkedComboBox_牌号") Dim HD As WinForm.CheckedComboBox = e.Form.Controls("checkedComboBox_厚度") If PH.Text="" Then PH.Text = PH.Combolist.Replace("全选","").Replace("|",",").TrimStart(",") End If If HD.Text="" Then HD.Text = HD.Combolist.Replace("全选","").Replace("|",",").TrimStart(",") End If Tables("销售出库明细主窗口_Table_工序合并表_副本").Filter="牌号 in (\'" & PH.Text.replace(",", "\',\'") & "\') and 厚度 in (\'" & HD.Text.replace(",", "\',\'") & "\')" & "and [工序] =\'成品入库\' and [库存标记]=true " 以上代码可以实现如下功能: CheckedComboBox的下拉中会有“全选”的项目,选中后就可实现全选的效果 CheckedComboBox的下拉中不选中任何项目,点筛选按钮后实现CheckedComboBox默认全选的效果 以上代码写的是否合理,是否有更直接简便的代码,请甜老师赐教!
[此贴子已经被作者于2015/2/11 14:47:07编辑过]
|
-- 作者:有点甜 -- 发布时间:2015/2/11 14:54:00 -- 代码合理,也只能这样做,那现在有什么问题? |
-- 作者:huangfanzi -- 发布时间:2015/2/11 15:01:00 -- 还有一个问题,想实现联动筛选功能,感觉有点难,老师看看能不能帮我写出来 假定有个 CheckBox_联动筛选 控件,当这个被选中时,实现以下功能: 在checkedComboBox_牌号中选中了牌号A,B,C,这时checkedComboBox_厚度的下拉内容中只有牌号A、B、C所对应的厚度,不会显示所有厚度,这样可大大提高选择速度,甜老师,这段感觉好复杂的代码能帮我写下吗?
|
-- 作者:Bin -- 发布时间:2015/2/11 15:04:00 -- 参考 http://www.foxtable.com/help/topics/1523.htm |
-- 作者:有点甜 -- 发布时间:2015/2/11 15:18:00 -- 参考7楼,条件你变换成 in (xxx) 即可。 |