1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

C# - Suchen in der ListView

Discussion in 'Programmieren' started by User071009, Aug 21, 2009.

Thread Status:
Not open for further replies.
  1. User071009

    User071009 Byte

    Ich habe ein Programm mit einer ListView erstellt. Die ListView besteht aus drei Spalten und mithilfe von Textboxen kann ich Daten in die ListView eintragen. :)

    Dann habe ich eine Textbox und einen Button erstellt. Nun möchte ich, dass wenn ich ein Suchwort in die Textbox eingebe, dann soll das Programm dieses Wort in der ListView suchen und die Zeile mit dem gefundenen Wort markieren.

    Wie mache ich das? Gibt's denn überhaupt für sowas ein "Coderezept"? Bitte helft mir! :bitte:

    Danke im Voraus!
     
  2. da_Ferdi

    da_Ferdi Halbes Megabyte

    Die folgende Methode gibt eine Liste mit den Indexen aller ListBoxItems im ListView zurück, deren Text den übergebenen String 'term' enthält:

    Code:
    List<int> SearchListView(string term)
    {
        List<int> l = new List<int>();
        foreach (ListViewItem i in listView1.Items)
        {
            if (i.Text.ToLower().Contains(term.ToLower()))
                l.Add(i.Index);
        }
        return l;
    }
    Im obigen Code wird nicht zwischen Groß/Kleinschreibung unterschieden; Willst du dies, lasse einfach die beiden Methoenaufrufe von ToLower() weg.
     
  3. User071009

    User071009 Byte

    Leider wurde der gesuchte Begriff nicht markiert oder angezeigt... :( Was habe ich da falsch gemacht?

    Code:
            private void abfrage_Click(object sender, EventArgs e)
            {
                List<int> l = new List<int>();
                foreach (ListViewItem i in listView1.Items)
                { 
                    if(i.Text.ToLower().Contains(textBox4.Text))
                        l.Add(i.Index);
                }
            }
    
     
  4. daboom

    daboom Megabyte

    Na der Code markiert ja auch an sich noch nichts, es wird halt bloß die Liste der entsprechenden Indizes erstellt.

    Außerdem hast Du das zweite "ToLower" vergessen (bei "textBox4.Text").

    Du musste halt die Liste nutzen, um die entsprechenden Items der ListView zu markieren bzw. selektieren. Wie man das macht, hab ich jetzt auf die schnelle nicht rausfinden können, bin nicht so C#-firm. Vielleicht mit der "FocusedItem" Eigenschaft, aber das ist nur eine Vermutung...
     
  5. da_Ferdi

    da_Ferdi Halbes Megabyte

    Oh, das mit dem Auswählen habe ich wohl überlesen..

    Code:
    private void HighlightMatches(string pattern)
            {
                foreach (ListViewItem current in listView1.Items)
                {
                    if (current.Text.ToLower().Contains(pattern.ToLower()))
                        listView1.Items[current.Index].Selected = true;
                    else
                        listView1.Items[current.Index].Selected = false;
                }
            }
    Rufe einfach diese Methode (mit angepassten Namen der Controls) etwa im Handler des Click- Events eines Buttons oder dem TextChanged- Events der TextBox auf. Wichtig ist, dass du die HideSelection- Eigenschaft des ListView Controls auf False setzt, damit die ausgewählten Elemente auch dann als ausgewählt dargestellt werden, wenn der Eingabefokus nicht auf dem ListView liegt.
     
  6. User071009

    User071009 Byte

    Schon getan. Trotzdem hat es nicht geklappt... :( Schau mal bitte, ob bei mir ein Fehler unterlaufen ist.

    Code:
            private void HighlightMatches(string pattern)
            {
                foreach (ListViewItem current in listView1.Items)
                {
                    if (current.Text.ToLower().Contains(pattern.ToLower()))
                        listView1.Items[current.Index].Selected = true;
                    else
                        listView1.Items[current.Index].Selected = false;
                }
            }
    
            private void abfrage_Click(object sender, EventArgs e)
            {
                HighlightMatches(textBox4.Text);
            }
    
    Schon getan.
     
Thread Status:
Not open for further replies.

Share This Page