Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - VB.net filtro textbox
Forum - C# / VB.NET - VB.net filtro textbox

Avatar
growning (Normal User)
Rookie


Messaggi: 22
Iscritto: 17/06/2009

Segnala al moderatore
Postato alle 19:01
Mercoledì, 17/06/2009
Questo topic è stato chiuso dal moderatore

Questo è il mio primo post, quindi prima di tutto saluto tutti!

Adesso arriviamo al problema.

Ho un form dove sono presenti un datagridview ed un textbox.

La datagridview prende i dati da una tabella di un db (sqlsrv2k5), che ha 3 colonne:

col1=integer
col2=varchar
col3=varchar
Ora.

Quello che voglio fare è molto semplice (solo che non ci riesco), scrivendo nella TB qualsiasi carattere, devo selezionare la prima riga della DGV con il carattere corrispondente. Cosa che con la col1 già funziona, essendo integer.

Il problema si pone per le colonne varchar, in 2quanto prima di selezionarmi la riga corrispondente, devo scrivere tutto il testo.

Sapete come potrei fare per selezionare la riga corrispondente scrivendo solo la prima lettera? (es col2='ciao' appena scrivo 'c' nella textbox mi seleziona la riga)

PM
Avatar
Jeremy (Normal User)
Pro


Messaggi: 134
Iscritto: 08/02/2009

Segnala al moderatore
Postato alle 22:41
Mercoledì, 17/06/2009
Ciao.
Se stiamo parlando di come fare una query sql che raggiunga l'obbiettivo che chiedi .... devi usare l'operatore LIKE.
Esempio:
SELECT * FROM TABELLA1 WHERE Col1 LIKE 'C%'
Ovviamente, dovrai sostituire 'C%' con un parametro da valorizzare a runtime con il valore della textbox.
Altrimenti .... se non ho capito ..... dacci qualche info in più su come attualmente filtri i dati.

Ciao

Ultima modifica effettuata da Jeremy il 17/06/2009 alle 22:42
PM
Avatar
growning (Normal User)
Rookie


Messaggi: 22
Iscritto: 17/06/2009

Segnala al moderatore
Postato alle 9:11
Giovedì, 18/06/2009
Ciao, attualmente io seleziono una riga così:

Codice sorgente - presumibilmente VB.NET

  1. For irow As Integer = 0 To DataGridView1.Rows.Count - 1
  2.      If DataGridView1.Item(0, irow).Value = TextBox1.Text Then
  3.           vrow = irow
  4.      End If
  5. DataGridView1.Item(0, vrow).Selected = True
  6. Next


PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:45
Giovedì, 18/06/2009
Codice sorgente - presumibilmente C# / VB.NET

  1. If DataGridView1.Item(0, irow).Value = TextBox1.Text.Chars(0) Then



Se ci sono maiuscole/minuscole, usa Char.ToLower per confrontarle case-insensitive.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
growning (Normal User)
Rookie


Messaggi: 22
Iscritto: 17/06/2009

Segnala al moderatore
Postato alle 10:23
Giovedì, 18/06/2009
Ciao Totem, il tuo codice funziona perfettamente, seleziono la riga che ha la prima lettera specificata, ma avendo due parole che iniziano con la stessa lettera?
Ho provato a fare una cosa del genere ma owiamente non funziona

Codice sorgente - presumibilmente VB.NET

  1. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
  2. Dim des As String
  3. If TextBox1.Text.Length = 1 Then
  4.  
  5.                     'deseleziono eventuali righe selezionate
  6.                     DataGridView1.ClearSelection()
  7.  
  8.                     'controllo i valori di tutte le righe della colonna num
  9.                     For irow As Integer = 0 To DataGridView1.Rows.Count - 1
  10.                         des = DataGridView1.Item(1, irow).Value
  11.  
  12.                         'se sono uguali al valore della tb1
  13.                         If des.Chars(0) = TextBox1.Text.ToUpper Then
  14.                             vrow = irow
  15.                         End If
  16.  
  17.                         'seleziono l'indice della riga della cella
  18.                         DataGridView1.Item(0, vrow).Selected = True
  19.                     Next
  20.                 End If
  21.  
  22.                 If TextBox1.Text.Length = 2 Then
  23.                     For irow As Integer = 0 To DataGridView1.Rows.Count - 1
  24.                         des = DataGridView1.Item(1, irow).Value
  25.  
  26.                         'se sono uguali al valore della tb1
  27.                         If des.Chars(1) = TextBox1.Text.ToUpper Then
  28.                             vrow = irow
  29.                         End If
  30.  
  31.                         'seleziono l'indice della riga della cella
  32.                         DataGridView1.Item(0, vrow).Selected = True
  33.                     Next
  34.                 End If
  35. End Sub


Ultima modifica effettuata da growning il 18/06/2009 alle 10:25
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:14
Venerdì, 19/06/2009
Perchè non funziona? Non seleziona niente? Dovrebbe selezionarti tutte le celle giuste...


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
growning (Normal User)
Rookie


Messaggi: 22
Iscritto: 17/06/2009

Segnala al moderatore
Postato alle 12:39
Venerdì, 26/06/2009
Ciao, scusate se sono scomparso.

Testo quotato

Postato originariamente da Il Totem:

Perchè non funziona? Non seleziona niente? Dovrebbe selezionarti tutte le celle giuste...



Alla prima lettera mi selezionava la riga giusta, ma alla seconda sballava.

In ogni caso per 'chiudere' il post volevo dirvi che alla fine ho utilizzato (come consigliatomi da Jeremy) un DataReader con query LIKE, il tutto funziona perfettamente con discreta velocità.

Ciao e alla prox!

Ultima modifica effettuata da growning il 26/06/2009 alle 12:43
PM