Sign in to follow this  
Followers 0
hogfan

Easiest way to count # times an item occurs in listview....

4 posts in this topic

I am using the native listview control and am looking for the quickest way to loop through the items in the listview control, counting how many times a value exists. For example, My listview has 3 columns.

Column 1 - Name

Column 2 - State

Column 3 - Resident/Non-resident

I need loop through the listiview, checking the third column to count how many are flagged as resident. Is there a good quick way of doing this directly by seaching through the listview, or will I have to read all of hte info into an array first and they search the array. I am looking for the quickest way to do this as I am doing this at work, for work but don't have any official time to work on it, so I am working on it between other projects. Any suggestions appreciated.

-hogfan

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

I think the below should work, When the loop exits, $Cnt should be the number of 'Resident's found

$i = 0
$Cnt = 0
While $i = _GUICtrlListView_FindText($hListView, "Resident",$i)
$i += 1 ;start next search after the current result
$Cnt += 1
Wend
Edited by Shane0000

Share this post


Link to post
Share on other sites

Here's one way of doing it.

#include <GUIConstantsEx.au3>
#include <guilistview.au3>
$Count = 0
GUICreate("Test Listview")
$listview = GUICtrlCreateListView("Name|State|Resident/Non-Resident", 10, 70, 380, 320)
For $I = 0 To 20
     If Mod($I, 2) Then
          $Res = "R"
     Else
          $Res = "N"
     EndIf
     GUICtrlCreateListViewItem("Name" & $I & "|State" & $I & "|" & $Res, $listview)
Next
$Button = GUICtrlCreateButton("Count", 10, 10)
GUISetState()
While 1
     $msg = GUIGetMsg()
     Switch $msg
          Case $GUI_EVENT_CLOSE
               Exit
          Case $Button
               For $I = 0 To _GUICtrlListView_GetItemCount($listview) - 1
                    $Array = _GUICtrlListView_GetItemTextArray($listview, $I)
                    If $Array[3] = "R" Then $Count += 1
               Next
               ConsoleWrite("Count = " & $Count & @CRLF)
     EndSwitch
WEnd

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

@BrewManNH

Thanks for that example. That got me going.

-hogfan

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0