Oppure

Loading
15/03/08 13:20
superchecco
Salve a tutti,
vorrei sapere se qualcuno mi sa indicare come fare una ricerca in una listbox tipo quella della rubrica dei cellulari.

Mi spiego meglio.
Quando in una textbox si scrive un carattere, nella listbox sottostante si eliminano le voci che non contengono quel carattere...
man mano che si scrive la parola, quindi, le voci diminuiscono sempre di piu'!

e ovviamente quando si cancellano caratteri le voci aumentano! E' da un sacco di tempo che mi chiedo come si possa fare, è chiaro che bisogna sapere lavorare bene con le stringhe!
grazie mille per le risposte, siete mitici :k: :k:
aaa
17/03/08 7:44
Il Totem
Basta una funzione: String.StartsWith.
Ti serve anche una lista o un array in memoria in cui memorizzi tutti i nomi della rubrica, poichè se cambi le lettere di ricerca, anche i vecchi nomi devono essere reinseriti. Quindi, assumendo di avere una lista di stringhe di nome Names, che contiene tutti i nomi:
Public Names As New List(Of String)

...

ListBox1.Items.Clear()
For Each Name As String In Names
  If Name.StartsWith(TextBox1.Text) Then
    ListBox1.Items.Add(Name)
  End If
Next

Dove TextBox1 è la textbox che contiene i criteri di ricerca.
aaa
17/03/08 11:10
superchecco
ok, il procedimento per la listbox l ho capito,

ma se fosse per un datagridview che lavora su un database?
prendendo come esempio il sorgente della guida di totem riguardo all'approccio ai DB,
come faccio a fare la suddetta ricerca all'interno di un datagridview??

io per adesso sono riuscito a fare
 Private Sub txtcerca_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtcerca.TextChanged
        If String.IsNullOrEmpty(txtcerca.Text) Then
            SqlSelect("SELECT * FROM Conti")
        Else
            SqlSelect(String.Format("SELECT * FROM Conti WHERE nome='{0}'", txtcerca.Text))
        End If
    End Sub


in questo modo pero se si modifica il campo quando è "ricercato" (cioe in seguito ad una ricerca) quando cancello tutto, facendo un SELECT * dalla tabella il campo torna ad essere vuoto, e non posso salvare i dati sulla tabella perche è una tabella standard che deve essere riusata piu volte.

insomma, il problema secondo me è difficile da spiegare (si tratta di un programma che calcoli il bilancio di un'azienda, inserendo i conti in un piano dei conti (la tabella Conti appunto).
quindi se qualcuno è disposto ad aiutarmi, SOPRATTUTTO PER LA PARTE RIGUARDANTE il collegamento con il DB mi farebbe un grande favore..
aspetto risposte..


(è la tesi d'esame,quindi una cosa importante..)
Ultima modifica effettuata da superchecco 17/03/08 11:20
aaa
18/03/08 15:14
Il Totem
Anziché la comparazione con = puoi usare l'operatore LIKE, di cui trovi una spiegazione su vari siti cercando con google. Questo codice, ad esempio, seleziona solo i contai che iniziano con il testo digitato:
SqlSelect(String.Format("Select * FROM Conti WHERE nome LIKE '{0}%'", txtcerca.Text))
aaa
19/03/08 7:20
superchecco
Postato originariamente da Il Totem:

Anziché la comparazione con = puoi usare l'operatore LIKE, di cui trovi una spiegazione su vari siti cercando con google. Questo codice, ad esempio, seleziona solo i contai che iniziano con il testo digitato:
SqlSelect(String.Format("Select * FROM Conti WHERE nome LIKE '{0}%'", txtcerca.Text))



(e dire che queste cose le sapevo pero non mi è venuto assolutamente in mente di applicarle con vb, che scemo XD)

comunque grazie mille, l'unica cosa è ancora questa:
se modifico un campo quando l'utente ha effettuato una ricerca(quindi i campi sono diminuiti nel datagrid) e vuole ritornare a vedere tutto il datagrid (cancellando cio' che aveva scritto nella textbox) se faccio un SELECT ALL generale non mi tiene anche il dato che ha modificato, perche io non l ho salvato nella tabella.

La tabella Conti ha 3 attributi{ID(PK),NOME,IMPORTO}

IO riempio tutta la colonna NOME (perche sono i nomi dei conti) e poi l utente dal datagrid deve riempire la colonna degli importi...quindi mi deve tornare utile altre volte per altre persone!
aaa
19/03/08 17:36
Il Totem
E perchè non lo salvi? Basta un Update per modificare il record, anche perchè disponi della primary key: non capisco dove sta il problema.
aaa