Solved

Find item in list view

Posted on 2004-09-29
5
351 Views
Last Modified: 2008-01-09
Dear experts,
I just wondering that is there any control available to search a string in the list view or not. If not could someone show me how to implement that control please.
There function of the control is similar to the Find function (F5) in Excel or Word, when you want to look up the string or piece of information, the popup dialog prompt to enter the string and a list of options such as Match case, Match the whole word, find next button, etc...
The function should be return the index of the list item in the list view.
I am thinking of using foreach to do this job but is there any better way to do so.

Thank you so much.

0
Comment
Question by:contran
  • 3
5 Comments
 
LVL 20

Expert Comment

by:TheAvenger
ID: 12187527
No, there isn't. You have to go over all elements in the list view and check using String.IndexOf() if the element contains the searched string.
0
 
LVL 10

Expert Comment

by:123654789987
ID: 12188306
Try this.

                                                ListView  listView2 = new ListView();

                  ListViewItem ite = new ListViewItem("Search text");
                   int foundListItem = listView2.Items.IndexOf(ite);
0
 
LVL 20

Expert Comment

by:TheAvenger
ID: 12188317
@123654789987: this solution could find only items which have exactly this text, it would not find an item with the text:

"Hello Search text Hello"

Also as you are creating a new listviewitem, I suppose it will not be found at all in the Items collection - it is just not there
0
 

Author Comment

by:contran
ID: 12196719
Hi TheAvenger,

Thank you for your suggestion , i can found the searching key using IndexOf() however how can i do the find next button i.e. if more than 1 results in the list view the findnext button should be able to capture all results.
Here is the code that i've used
//The str - the search key word,
//flag - indicate the optional search i.e. 0 for match exact word, 1 for match case
private int SearchItem(string str,int flag)
{
  int index = -1;
  foreach(System.Windows.Forms.ListViewItem item in this.listView1.Items)
  {
     foreach(ListViewItem.ListViewSubItem subItem in item.SubItems)
     {
       if(flag == 0)
       {
          if(subItem.Text.Trim() == str.Trim())
      index =  item.Index;
       }
     
      if(flag == 1)
      {
        int text = subItem.Text.IndexOf(str);
        if(text!=0)
        {
           //MessageBox.Show(this,text.ToString(),"");
           index =  item.Index;
        }
       }
     }
   }
       return index;      
}




0
 
LVL 20

Accepted Solution

by:
TheAvenger earned 125 total points
ID: 12198453
Well, you can keep a collection of list items that contain the required text. For example use an ArrayList to put the list items in.

And one remark: the comparison if (text != 0) is wrong. It should be if (text >= 0) because 0 is a valid index, so IndexOf will return 0 if the text starts with what you search for.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article introduced a TextBox that supports transparent background.   Introduction TextBox is the most widely used control component in GUI design. Most GUI controls do not support transparent background and more or less do not have the…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question