Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Ricerca tipo rubrica cellulare
Forum - C# / VB.NET - Ricerca tipo rubrica cellulare

Avatar
superchecco (Normal User)
Pro


Messaggi: 141
Iscritto: 20/01/2007

Segnala al moderatore
Postato alle 14:20
Sabato, 15/03/2008
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:

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 8:44
Lunedì, 17/03/2008
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:
Codice sorgente - presumibilmente VB.NET

  1. Public Names As New List(Of String)
  2.  
  3. ...
  4.  
  5. ListBox1.Items.Clear()
  6. For Each Name As String In Names
  7.   If Name.StartsWith(TextBox1.Text) Then
  8.     ListBox1.Items.Add(Name)
  9.   End If
  10. Next


Dove TextBox1 è la textbox che contiene i criteri di ricerca.

PM Quote
Avatar
superchecco (Normal User)
Pro


Messaggi: 141
Iscritto: 20/01/2007

Segnala al moderatore
Postato alle 12:10
Lunedì, 17/03/2008
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
Codice sorgente - presumibilmente VB.NET

  1. Private Sub txtcerca_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtcerca.TextChanged
  2.         If String.IsNullOrEmpty(txtcerca.Text) Then
  3.             SqlSelect("SELECT * FROM Conti")
  4.         Else
  5.             SqlSelect(String.Format("SELECT * FROM Conti WHERE nome='{0}'", txtcerca.Text))
  6.         End If
  7.     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 il 17/03/2008 alle 12:20
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:14
Martedì, 18/03/2008
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:
Codice sorgente - presumibilmente C# / VB.NET

  1. SqlSelect(String.Format("Select * FROM Conti WHERE nome LIKE '{0}%'", txtcerca.Text))


PM Quote
Avatar
superchecco (Normal User)
Pro


Messaggi: 141
Iscritto: 20/01/2007

Segnala al moderatore
Postato alle 8:20
Mercoledì, 19/03/2008
Testo quotato

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:
Codice sorgente - presumibilmente C# / VB.NET

  1. 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!

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 18:36
Mercoledì, 19/03/2008
E perchè non lo salvi? Basta un Update per modificare il record, anche perchè disponi della primary key: non capisco dove sta il problema.

PM Quote