Ricerca in ListView

di il
5 risposte

Ricerca in ListView

Salve a tutti, Sto facendo la ricerca in una listView, solo che quando cerco un nome, e ne trovo due uguali mi rimangono tutti e due in selezione. E se provo a selezionarne uno mi rimangono sempre tutti e due selezionati. Come posso risolvere? Grazie in anticipo
Ecco il codice:

private void TCerca_TextChanged(object sender, EventArgs e)
        {
            if (TCerca.Text != "")
            {
                for (int i = ListView1.Items.Count - 1; i >= 0; i--)
                {
                    var item = ListView1.Items[i];
                    var subitem = ListView1.Items[i].SubItems[1];
                    var subitem1 = ListView1.Items[i].SubItems[6];
                    var subitem2 = ListView1.Items[i].SubItems[7];
                    var subitem3 = ListView1.Items[i].SubItems[8];
                    var subitem4 = ListView1.Items[i].SubItems[9];
                    var subitem5 = ListView1.Items[i].SubItems[12];
                    var subitem6 = ListView1.Items[i].SubItems[13];
                    if (item.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem1.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem2.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem3.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem4.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem5.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem6.Text.ToLower().Contains(TCerca.Text.ToLower()))
                    {
                        item.BackColor = SystemColors.Highlight;
                        item.ForeColor = SystemColors.HighlightText;
                        subitem.BackColor = SystemColors.Highlight;
                        subitem.ForeColor = SystemColors.HighlightText;
                        subitem1.BackColor = SystemColors.Highlight;
                        subitem1.ForeColor = SystemColors.HighlightText;
                        subitem2.BackColor = SystemColors.Highlight;
                        subitem2.ForeColor = SystemColors.HighlightText;
                        subitem3.BackColor = SystemColors.Highlight;
                        subitem3.ForeColor = SystemColors.HighlightText;
                        subitem4.BackColor = SystemColors.Highlight;
                        subitem4.ForeColor = SystemColors.HighlightText;
                        subitem5.BackColor = SystemColors.Highlight;
                        subitem5.ForeColor = SystemColors.HighlightText;
                        subitem6.BackColor = SystemColors.Highlight;
                        subitem6.ForeColor = SystemColors.HighlightText;
                    }
                    else
                    {
                        ListView1.Items.Remove(item);
                    }
                }
                if (ListView1.SelectedItems.Count == 1)
                {
                    ListView1.Focus();
                }
            }
            if (TCerca.TextLength == 0)
            {
                ListView1.Items.Clear();
                CaricaElencoGenitori();
                //ListView1.Refresh();
            }
        }
 

5 Risposte

  • Re: Ricerca in ListView

    Usa i tag CODE o non si capirà nulla
  • Re: Ricerca in ListView

    oregon ha scritto:


    Usa i tag CODE o non si capirà nulla
    scusami, ma non ho capito cosa intendi
  • Re: Ricerca in ListView

    Leggi il Regolmento:
    7. Formattare il codice sorgente
  • Re: Ricerca in ListView

    Vuoi selezionare un solo risultato della ricerca? Basta che nel rigo successivo a:

    subitem6.ForeColor = SystemColors.HighlightText;

    inserisci due istruzioni:

    int j=i;
    break;

    (prima della parentesi graffa di chiusura ovviamente)

    Così, quando la ricerca avrà trovato ed evidenziato il primo nome, uscirà dal ciclo e andrà alla prima istruzione successiva dopo la fine del ciclo for. Se poi devi anche cancellare tutti gli altri elementi della ListView (cioè tutti quelli precedenti non selezionati), allora prima della riga

    ListView1.Focus();

    inserisci:

    for (int k = j-1; k>=0; k--)
    ListView1.Items[k].Remove();

    Così rimuovi tutti gli altri elementi precedenti. Prova... (io non ho verificato )
  • Re: Ricerca in ListView

    Aspetta... si può fare di meglio. Ecco come:
    private void TCerca_TextChanged(object sender, EventArgs e)
            {
                if (TCerca.Text != "")
                {
                    bool trovato = false;
                    for (int i = ListView1.Items.Count - 1; i >= 0; i--)
                    {
                        var item = ListView1.Items[i];
                        var subitem = ListView1.Items[i].SubItems[1];
                        var subitem1 = ListView1.Items[i].SubItems[6];
                        var subitem2 = ListView1.Items[i].SubItems[7];
                        var subitem3 = ListView1.Items[i].SubItems[8];
                        var subitem4 = ListView1.Items[i].SubItems[9];
                        var subitem5 = ListView1.Items[i].SubItems[12];
                        var subitem6 = ListView1.Items[i].SubItems[13];
                        if (trovato == false && (item.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem1.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem2.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem3.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem4.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem5.Text.ToLower().Contains(TCerca.Text.ToLower()) || subitem6.Text.ToLower().Contains(TCerca.Text.ToLower())))
                        {
                            item.BackColor = SystemColors.Highlight;
                            item.ForeColor = SystemColors.HighlightText;
                            subitem.BackColor = SystemColors.Highlight;
                            subitem.ForeColor = SystemColors.HighlightText;
                            subitem1.BackColor = SystemColors.Highlight;
                            subitem1.ForeColor = SystemColors.HighlightText;
                            subitem2.BackColor = SystemColors.Highlight;
                            subitem2.ForeColor = SystemColors.HighlightText;
                            subitem3.BackColor = SystemColors.Highlight;
                            subitem3.ForeColor = SystemColors.HighlightText;
                            subitem4.BackColor = SystemColors.Highlight;
                            subitem4.ForeColor = SystemColors.HighlightText;
                            subitem5.BackColor = SystemColors.Highlight;
                            subitem5.ForeColor = SystemColors.HighlightText;
                            subitem6.BackColor = SystemColors.Highlight;
                            subitem6.ForeColor = SystemColors.HighlightText;
                            trovato = true;
                        }
                        else
                        {
                            ListView1.Items.Remove(item);
                        }
                    }
                    if (ListView1.SelectedItems.Count == 1)
                    {
                        ListView1.Focus();
                    }
                }
                if (TCerca.TextLength == 0)
                {
                    ListView1.Items.Clear();
                    CaricaElencoGenitori();
                    //ListView1.Refresh();
                }
            }
     
    Good luck
Devi accedere o registrarti per scrivere nel forum
5 risposte