Filtro ad un DataGridView

martedì 29 maggio 2012 - 21.34
Tag Elenco Tags  VB.NET  |  Visual Studio 2010

napster86 Profilo | Newbie

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

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

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

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

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

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

>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

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

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

Risolto:
Me.MioDataSet.Cliente
anziche ds di DataSet ;-)

Funziona perfetto!!! Grazie di tutto

ridaria Profilo | Expert

prego.

Se ti sono stato di aiuto mi spunteresti il tread come risolto cliccando su accetta?

Grazie a te
Riccardo D'Aria
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 !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5