JiangShi 发表于 2011-3-4 12:16:23

[已解决]如何实现在ListView中按条件查找后,让ListView只显示符合条件的行

本帖最后由 JiangShi 于 2011-3-4 21:13 编辑

我做了个ListView,然后从数据库里面读取了数据.我设了个查找输入框及查找按钮

想实现在ListView中按条件查找后,最后让ListView只显示符合条件的行

JiangShi 发表于 2011-3-4 12:18:53

查找用_GUICtrlListView_FindInText 可以.但我不知道怎么能让ListView只显示符合条件的行

JiangShi 发表于 2011-3-4 16:00:10

在官方论坛找了10多页..也没发现要找到的...哪位高手帮忙看看

yhxhappy 发表于 2011-3-4 19:47:07

把其它行删除不就行了
也可以这样,把ListView内的内容照搬进数组,需要查找时,在数组里面查找,找到后,把ListView表里面的内容清空,添加 找到行的内容。想恢复ListView表原状,则把数组的内容照搬回ListView就行了

JiangShi 发表于 2011-3-4 20:03:14

把其它行删除不就行了
也可以这样,把ListView内的内容照搬进数组,需要查找时,在数组里面查找,找到后, ...
yhxhappy 发表于 2011-3-4 19:47 http://autoitx.com/images/common/back.gif


    我试试,谢谢

蜘蛛抱蛋 发表于 2011-3-4 20:05:03

下面是我从自己的程序里抠下来的,GUI你自己添加一下吧Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
        Local $nNotifyCode = _HiWord($wParam)
        Local $nID = _LoWord($wParam)
        Switch $nID
        Case $filter    ; input控件句柄
                Switch $nNotifyCode
                        Case $EN_CHANGE
                                _FilterItem(GUICtrlRead($filter))
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_COMMAND

Func _HiWord($x)
        Return BitShift($x, 16)
EndFunc   ;==>_HiWord

Func _LoWord($x)
        Return BitAND($x, 0xFFFF)
EndFunc   ;==>_LoWord

Func _FilterItem($keyword)
        If $aLVItems = 0 Then Return
        If $keyword Then   ;用户输入过滤关键词
                Local $aNewFilter =
                For $i = 1 To $aLVItems
                        If StringInStr($aLVItems[$i], $keyword) Then   ; 暂存符合条件得项目
                                $aNewFilter += 1
                                ReDim $aNewFilter[$aNewFilter + 1]
                                $aNewFilter[$aNewFilter] = $aLVItems[$i]
                        EndIf
                Next
                _GUICtrlListView_DeleteAllItems($hListView)   ;ListView控件句柄
                If $aNewFilter = 0 Then Return
                For $i = 1 To $aNewFilter
                        GUICtrlCreateListViewItem($aNewFilter[$i], $hListView)
                Next
                $aNewFilter = ''
        Else
                _GUICtrlListView_DeleteAllItems($hListView)
                For $i = 1 To $aLVItems
                        GUICtrlCreateListViewItem($aLVItems[$i], $hListView)
                Next
        EndIf
EndFunc   ;==>_FilterItem

netegg 发表于 2011-3-4 20:06:18

回复 1# JiangShi

你这个问题问的顺序有些问题,是按条件查找数据库,然后填入listview,不是先创建listview,再查找listview

蜘蛛抱蛋 发表于 2011-3-4 20:16:41

回复 7# netegg


    额,难道我理解错了?

JiangShi 发表于 2011-3-4 20:22:36

本帖最后由 JiangShi 于 2011-3-4 20:26 编辑

回复JiangShi

你这个问题问的顺序有些问题,是按条件查找数据库,然后填入listview,不是先创建listv ...
netegg 发表于 2011-3-4 20:06 http://autoitx.com/images/common/back.gif


    因为我的数据库有多个表,形成多个查询结果填入ListView,同时我又需要对填入Listview的内容在次搜索,我又想一个搜索按钮解决问题.所以只能对Listview的内容进行处理.

netegg 发表于 2011-3-4 20:36:41

回复 9# JiangShi
多表查询更不可能先处理listview了,只能先处理数据库,那个是按钮代码的事

JiangShi 发表于 2011-3-4 20:46:11

回复JiangShi
多表查询更不可能先处理listview了,只能先处理数据库,那个是按钮代码的事
netegg 发表于 2011-3-4 20:36 http://autoitx.com/images/common/back.gif


    HEHE,我弄了3个sqlite数据表.查询结果分10个左右显示在ListView内..感觉做在搜索按钮上比较麻烦,就想对显示在Listview的内容二次搜索显示....

JiangShi 发表于 2011-3-4 20:58:43

回复JiangShi
多表查询更不可能先处理listview了,只能先处理数据库,那个是按钮代码的事
netegg 发表于 2011-3-4 20:36 http://autoitx.com/images/common/back.gif


    算了.我还是按照你的思路啦处理按钮....继续研读去.做好我的第一个程序.哈

JiangShi 发表于 2011-3-4 21:14:51

我还是通过按钮来处理数据库来解决了.就是代码比较多...等做完在想办法精简把..

fhp2009 发表于 2011-8-26 19:33:36

做两个listview,一个显示一个隐藏,查找时把符合条件的插入到隐藏的那个,然后显示它,而另一个隐藏。这样避免数据量很大时删除插入操作。

gmzlmxm 发表于 2011-8-28 00:21:19

头大~~~~~``http://www.pgpop.com/image/face1.gif



























http://bbs.hangzhou.com.cn/images/default/sigline.gif
去斑方法
页: [1] 2
查看完整版本: [已解决]如何实现在ListView中按条件查找后,让ListView只显示符合条件的行