Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Filtro ad un DataGridView
martedì 29 maggio 2012 - 21.34
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
Visual Studio 2010
napster86
Profilo
| Newbie
36
messaggi | Data Invio:
mar 29 mag 2012 - 21:34
Salve a tutti, sto cercando di creare un programmino e mi sono bloccato su questo punto.
Ho un datagridview che mi mostra la tabella di un database e fin qui tutto ok. metto anche il sort per ordinarmi gli elementi al suo interno ed è sempre ok. Il problema che sorge, avviene quando voglio far visualizzare nel datagrid solo gli elementi che cominciano per una lettera as es. la lettera "A" , come faccio?? qualcuno può aiutarmi??
Grazie in anticipo!!!
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
gio 31 mag 2012 - 11:00
Il filtro dovresti metterlo nella query sql con cui interroghi il db e con la quale popoli la griglia:
Non mi risulta che le griglie possano da sole eseguire dei filtraggi sui dati.
CIAO
Riccardo D'Aria
jekisi
Profilo
| Senior Member
460
messaggi | Data Invio:
gio 31 mag 2012 - 20:53
Prima di tutto fai una query, ovviamente assegnata al dataset.
Quindi vai sul dataset e aggiungi la query.
Puoi usare l' operatore LIKE, esempio:
SELECT CODICE, DITTA, INDIRIZZO, CAP, CITTA, PR, P_IVA, TELEFONO_1, TELEFONO_2, TELEFONO_3, FAX, CELLULARE_1, CELLULARE_2, CELLULARE_3, WEB, E_MAIL_1, E_MAIL_2, C_FISCALE, VARIAZIONE, SETTORE, ANNOTAZIONI FROM clienti WHERE (Ditta LIKE ? & '%')
ditta è il campo da cercare in questo caso.
Assegna un nome alla query, esempio:
FillBy_ricerca_per_ditta
Poi nel form metti una textbox, dove digiti, in questo caso, la ditta da cercare e richiamare la query, quindi:
Me.ClientiTableAdapter.FillBy_ricerca_per_ditta(Me.MessinaDataSet.clienti, TextBox1.Text)
Fabiointernational@msn.com
Distinti Saluti
Fabio Messina
napster86
Profilo
| Newbie
36
messaggi | Data Invio:
sab 2 giu 2012 - 11:53
ho provato, ma non va, mi sa che sbaglio !!!
In pratica la mia idea era crearmi sul form dei label in successione tipo: A B C D E F G H I ecc... e premendo su uno di essi, mi dava tutti i clienti con il cognome che iniziava per la lettera scelta... Hai qualche suggerimento da darmi? Cmq grazie infinite ;-)
Naturalmente parliamo di vb.net
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
sab 2 giu 2012 - 17:42
allora:
Metti una textbox "txtTrova" in cui inserisce il testo da cercare, puo essere anche una sola lettera ad esempio "b" o "ba" oppure un intero cognome.
Poi metti una combobox "cmbTrovaIn" in cui iserisci il campo in cercare ex: Nome; cognome; ragione sociale; ecc.
L'utente mette il testo da cercare e seleziona nella combobox dove crecare, se per nome, per cognome, per ragione sociale etc...
Poi metti un pulsante la cui text sarà: trova. Di seguito una immagine dei controlli:
311x198
34Kb
Poi quando lo clicca ti parte le sub dell'evento click e qui farai quanto segue:
Vedi in che campo ha deciso di cercare se in nome, o cognome o altro;
e metti il nome del campo che ha scelto ex. cognome in una variabile string tipo: nomeCampo
prelevi il testo che ha messo nella text box e lo metti un una variabile string tipo varTesto
Assembli la query in modo che vada a cercare quella stringa in quel determinato campo.
La query deve essere fatta con l'operatore Like in modo che cerchi la stringa immessa e qualunque cosa la segua.
Se hai problemi con l'operatore Like, leggiti un pò le sue funzionalità sul web ne trovi a bizzeffe.
Di seguito tutto il codice dell'evento clik del Pulsante Trova:
Private Sub ButtonTrova_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonTrova.Click
Try
Dim nomeCampo As String = ""
dim strSQL as String = ""
Dim idCat As Integer = 0
Dim idSubCat As Integer = 0
Dim testo = txtTrova.Text.Trim 'Assegno il contenuto della text box alla variabile testo
testo = Replace(testo, "'", "''")
DataGridView1.Rows.Clear() 'ripulisco la griglia
Select Case cmbTrovaIn.Text
'Con questa select intercetto il campo in cui cercare scelto dall'utente e assemblo la query SQl 'in funzione del campo in cui cercare
Case "Nome"
nomeCampo = "Nome"
strSQL = "Select * from AnagSoggetti where " & nomeCampo & " like '" & testo & "%'"
Case "Cognome"
nomeCampo = "Cognome"
strSQL ="Select * from AnagSoggetti where " & nomeCampo & " like '" & testo & "%'"
Case "Ragione Sociale"
nomeCampo = "RagioneSociale"
strSQL = "Select * from AnagSoggetti where " & nomeCampo & " like '" & testo & "%'"
Case "Città"
nomeCampo = "citta"
strSQL ="Select * from AnagSoggetti where " & nomeCampo & " like '" & testo & "%'"
End Select
Catch ex As Exception
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical)
End Try
End Sub
'A questo punti non devi far altyro che popolare la griglia e vedrai che avrai tutti quelli che iniziano per a se ha messo nella text box a;
tutti qulli che iniziono per b se ha messo b etc..
è chiaro che se mette mat avrai tutti quelli che iniziono per mat
Riccardo D'Aria
napster86
Profilo
| Newbie
36
messaggi | Data Invio:
mar 12 giu 2012 - 10:49
Ciao, ti ringrazio per la tua disponibilità... Ho seguito il tuo consiglio, però mi da un errore, quando vado a clikkare sul pulsante trova, mi dice che è impossibile cancellare l'elenco. Come mai? cosa accade?
Grazie infinite!!!
Ciao
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mar 12 giu 2012 - 11:41
>Ciao, ti ringrazio per la tua disponibilità... Ho seguito il
>tuo consiglio, però mi da un errore, quando vado a clikkare sul
>pulsante trova, mi dice che è impossibile cancellare l'elenco.
di sicuro è il :DataGridView1.Rows.Clear()
con questo ripulisco la griglia ad ogni evento trova altrimenti accoderebbe ogni volta i risultati trovati a quelli precedenti.
togli la riga di codice che ripulisce la griglia "DataGridView1.Rows.Clear()".
e dovrebbe andare, però verifica che fa poi ad ogni trova, altrimenti accoda sempre tutto.
Fammi sapere.
>Grazie infinite!!!
>Ciao
Riccardo D'Aria
napster86
Profilo
| Newbie
36
messaggi | Data Invio:
mar 12 giu 2012 - 11:48
Non succede nulla, resta tutto invariato... Vorrei farti una domanda, ma se invece di una textBox mettessi direttamente una lettera ad es. "A" cambierebbe qualcosa? o il procedimento è sempre lo stesso?
napster86
Profilo
| Newbie
36
messaggi | Data Invio:
mar 12 giu 2012 - 12:48
E se provassi così:
Dim ds As New DataSet
Dim BS As New BindingSource
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
BS.DataSource = ds.Tables("Cliente")
DataGridView1.DataSource = BS
If TextBox1.TextLength > 0 Then
BS.Filter = String.Format("Cognome Like '" & TextBox1.Text) & "*'"
Else
BS.Filter = String.Empty
End If
End Sub
In pratica una ricerca istantanea.. però non funziona bene, cosa sbaglio?
Grazie e scusa il disturbo
Ciao
napster86
Profilo
| Newbie
36
messaggi | Data Invio:
mar 12 giu 2012 - 12:54
Risolto:
Me.MioDataSet.Cliente
anziche ds di DataSet ;-)
Funziona perfetto!!! Grazie di tutto
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mar 12 giu 2012 - 13:58
prego.
Se ti sono stato di aiuto mi spunteresti il tread come risolto cliccando su accetta?
Grazie a te
Riccardo D'Aria
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !