找回密码
 加入
搜索
查看: 13514|回复: 16

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

 火.. [复制链接]
发表于 2011-3-4 12:16:23 | 显示全部楼层 |阅读模式
本帖最后由 JiangShi 于 2011-3-4 21:13 编辑

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

想实现在ListView中按条件查找后,最后让ListView只显示符合条件的行
 楼主| 发表于 2011-3-4 12:18:53 | 显示全部楼层
查找用_GUICtrlListView_FindInText 可以.但我不知道怎么能让ListView只显示符合条件的行
 楼主| 发表于 2011-3-4 16:00:10 | 显示全部楼层
在官方论坛找了10多页..也没发现要找到的...哪位高手帮忙看看
发表于 2011-3-4 19:47:07 | 显示全部楼层
把其它行删除不就行了
也可以这样,把ListView内的内容照搬进数组,需要查找时,在数组里面查找,找到后,把ListView表里面的内容清空,添加 找到行的内容。想恢复ListView表原状,则把数组的内容照搬回ListView就行了
 楼主| 发表于 2011-3-4 20:03:14 | 显示全部楼层
把其它行删除不就行了
也可以这样,把ListView内的内容照搬进数组,需要查找时,在数组里面查找,找到后, ...
yhxhappy 发表于 2011-3-4 19:47



    我试试,谢谢
发表于 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] = 0 Then Return
        If $keyword Then     ;用户输入过滤关键词
                Local $aNewFilter[1] = [0]
                For $i = 1 To $aLVItems[0]
                        If StringInStr($aLVItems[$i], $keyword) Then     ; 暂存符合条件得项目
                                $aNewFilter[0] += 1
                                ReDim $aNewFilter[$aNewFilter[0] + 1]
                                $aNewFilter[$aNewFilter[0]] = $aLVItems[$i]
                        EndIf
                Next
                _GUICtrlListView_DeleteAllItems($hListView)     ;ListView控件句柄
                If $aNewFilter[0] = 0 Then Return
                For $i = 1 To $aNewFilter[0]
                        GUICtrlCreateListViewItem($aNewFilter[$i], $hListView)
                Next
                $aNewFilter = ''
        Else
                _GUICtrlListView_DeleteAllItems($hListView)
                For $i = 1 To $aLVItems[0]
                        GUICtrlCreateListViewItem($aLVItems[$i], $hListView)
                Next
        EndIf
EndFunc   ;==>_FilterItem

评分

参与人数 1金钱 +20 收起 理由
JiangShi + 20

查看全部评分

发表于 2011-3-4 20:06:18 | 显示全部楼层
回复 1# JiangShi

你这个问题问的顺序有些问题,是按条件查找数据库,然后填入listview,不是先创建listview,再查找listview
发表于 2011-3-4 20:16:41 | 显示全部楼层
回复 7# netegg


    额,难道我理解错了?
 楼主| 发表于 2011-3-4 20:22:36 | 显示全部楼层
本帖最后由 JiangShi 于 2011-3-4 20:26 编辑
回复  JiangShi

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



    因为我的数据库有多个表,形成多个查询结果填入ListView,同时我又需要对填入Listview的内容在次搜索,我又想一个搜索按钮解决问题.所以只能对Listview的内容进行处理.
发表于 2011-3-4 20:36:41 | 显示全部楼层
回复 9# JiangShi
多表查询更不可能先处理listview了,只能先处理数据库,那个是按钮代码的事

评分

参与人数 1金钱 +20 收起 理由
JiangShi + 20

查看全部评分

 楼主| 发表于 2011-3-4 20:46:11 | 显示全部楼层
回复  JiangShi
多表查询更不可能先处理listview了,只能先处理数据库,那个是按钮代码的事
netegg 发表于 2011-3-4 20:36



    HEHE,我弄了3个sqlite数据表.查询结果分10个左右显示在ListView内..感觉做在搜索按钮上比较麻烦,就想对显示在Listview的内容二次搜索显示....
 楼主| 发表于 2011-3-4 20:58:43 | 显示全部楼层
回复  JiangShi
多表查询更不可能先处理listview了,只能先处理数据库,那个是按钮代码的事
netegg 发表于 2011-3-4 20:36



    算了.我还是按照你的思路啦处理按钮....继续研读去.做好我的第一个程序.哈
 楼主| 发表于 2011-3-4 21:14:51 | 显示全部楼层
我还是通过按钮来处理数据库来解决了.就是代码比较多...等做完在想办法精简把..
发表于 2011-8-26 19:33:36 | 显示全部楼层
做两个listview,一个显示一个隐藏,查找时把符合条件的插入到隐藏的那个,然后显示它,而另一个隐藏。这样避免数据量很大时删除插入操作。
发表于 2011-8-28 00:21:19 | 显示全部楼层
头大~~~~~``




























去斑方法
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-29 09:57 , Processed in 0.366444 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表