[VB.NET]: Cercare all'interno di un DatagridView

di il
22 risposte

[VB.NET]: Cercare all'interno di un DatagridView

Buongiorno a tutti,

vi posto un codice che utilizzo per cercare dei dati all'interno delle celle di un DTG tramite un Button e una TextBox:

Try
 For Each Row As DataGridViewRow In Dtg_lista_prodotti.Rows
For Each Cell As DataGridViewCell In Row.Cells
 If Cell.Value.ToString = Txt_cerca_prodotto.Text Then
 Dtg_lista_prodotti.CurrentCell = Cell
 End If
  Next
 Next
 Catch ex As Exception
MsgBox("Articolo non presente: " & ex.Message)
End Try

Questo codice lo uso da sempre, però mi limita molto la ricerca perchè prima di tutto occorre inserire tutta la parola ed inoltre cerca solo un prodotto alla volta.

Quello che io vorrei è evitare il button e ricercare direttamente all'interno della textbox tramite la funzione TextChanged, inoltre non essere costretto ad inserire tutta la parola ma solo alcuni caratteri per ricercare piu' dati e non solo una riga per volta

Nel web ci sono tanti esempi ma tutti collegati al database io invece vorrei cercare nella DTG stessa.

E' il primo post per me e vi ringrazio già del vostro aiuto.

Maninblack74

22 Risposte

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    03/11/2023 - Maninblack74 ha scritto:


    Quello che io vorrei è evitare il button e ricercare direttamente all'interno della textbox tramite la funzione TextChanged

    Esegui l'evento quando cambia il contenuto della TextBox invece che al click del Button: qual è la difficolta?

    03/11/2023 - Maninblack74 ha scritto:


    inoltre non essere costretto ad inserire tutta la parola ma solo alcuni caratteri per ricercare piu' dati e non solo una riga per volta

    Anche questo è banale: invece di confrontare l'intero testo inserito con quello della griglia, fai una comparazione parziale del testo.

    03/11/2023 - Maninblack74 ha scritto:


    Questo codice lo uso da sempre, però mi limita molto la ricerca perchè prima di tutto occorre inserire tutta la parola ed inoltre cerca solo un prodotto alla volta.

    Se la griglia è agganciata a una fonte dati (tabella di database o lista di oggetti), forse è meglio basare la ricerca su quella fonte piuttosto che cercare in griglia.

    Se il responso deve restituire più risultati, a questo punto la ricerca va modificata in modo estensivo per funzionare in modo diverso, ad esempio presentando i risultati in una finestra separata, o memorizzandoli e supportando una navigazione tra le posizioni in griglia dei risultati trovati, e così via.

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    03/11/2023 - Maninblack74 ha scritto:


    Quello che io vorrei è evitare il button e ricercare direttamente all'interno della textbox tramite la funzione TextChanged, inoltre non essere costretto ad inserire tutta la parola ma solo alcuni caratteri per ricercare piu' dati e non solo una riga per volta

    Quindi se vuoi cercare pasta del capitano esegui il codice per ogni cambio testo? Sempre fermandoti al primo trovato.

    Cioè:

    P cerca il testo P

    Pa cerca il testo Pa

    Pas cerca il testo Pas

    E così via fino a Pasta del capitano…

    Sempre per n celle…

    Usa l'evento keypress con la ricerca alla pressione del tasto invio.

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    Scusate il ritardo nel rispondervi.

    In tanto grazie a tutti, ora mi studio quello che mi avete consigliato e poi vi dico grazie ancora

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    Ragazzi scusate ma io non ne vengo fuori….

    Per Alka è scontato, ma per no.

    E' già tanto che sia riuscito a imparare a cercare nel Datagridview tramite una text e un button, 

    Io non vorrei cercare tramite il database ma direttamente nel Datagridview

    Scusate ma sono 7 gg che sto cercando d'imparare questa cosa ma chiaramente a differenza vostra per me è veramente un casino

    Scusate l'ignoranza in materia, ma faccio tutt'altro nella vita ah ah ah

    Maninblack74

    Scusate ancora

    PS: Vorrei studiare bene questa Datagridview che mi piace molto usare ma difficile da gestire in base alle mie conoscenze. Sapete un link o sito serio dove io possa studiare?

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    Salve,

    https://documents.pub/document/data-grid-view-faq.html

    salutoni romagnoli
    – 
    Andrea Montanari

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    08/11/2023 - Maninblack74 ha scritto:


    Ragazzi scusate ma io non ne vengo fuori….

    Se non posti il codice non possiamo darti una mano.

    08/11/2023 - Maninblack74 ha scritto:


    Scusate l'ignoranza in materia, ma faccio tutt'altro nella vita ah ah ah

    Ci sta, ma non possiamo fare le cose al posto tuo perché non hai tempo, voglia o desiderio di approfondire le tematiche.

    08/11/2023 - Maninblack74 ha scritto:


    PS: Vorrei studiare bene questa Datagridview

    Hai provato con una ricerca su Google? Si tratta di un controllo che è presente ormai da anni e anni, se n'è parlato ovunque nel Web.

    Certo, se l'obiettivo non è trovare informazioni ma un “pezzo di codice” già pronto da usare, è già un'impresa più difficile trovare qualcosa che faccia esattamente per filo e per segno che ciò che chiedi. Mi domando però che gusto ci sarebbe alla fine… :|

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    Alka forse stai facendo un po' di confusione. il codice te l'ho postato sopra e con quello vorrei andare avanti. L'ho scritto 5 volte

    Inoltre spero che tu sappia che il sottoscritto ha 50 anni e dire a me che non ho voglia o tempo forse sei stato azzardato e non sicuramente rispettoso nei miei confronti. Non sono un bambino e sicuramente ho rispetto per l'essere umano.

    Visto che non sono uomo da polemiche inutili e dichiarato tutto ciò, lo ripeto per l'ennesima volta, il codice esiste e l'ho postato insieme al tittolo del post. Quel codice riesce a trovare solamente una “riga” per volta e funziona con un button invece quello che io vorrei fare è modificare eventualmente quel codice ma direttamente nella textchanged.

    E poi, secondo te, ti mando il codice che IO ho costruito con le mie poche e umili conoscenze per  domandare a voi un codice già fatto?????

    NON PENSO PROPRIO. Ho scritto che vorrei studiare questa datagridview e non “rubare” codici a destra e a manca, non è nel mio stile.

    Non è vero che trovi questa cosa Ovunque come dici tu, perchè io non la trovo.

    Spero di essere stato chiaro almeno questa volta

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    09/11/2023 - Maninblack74 ha scritto:


    Alka forse stai facendo un po' di confusione. il codice te l'ho postato sopra e con quello vorrei andare avanti. L'ho scritto 5 volte

    Il codice che hai postato è quello di partenza, a cui sono seguite risposte e indicazioni da parte di diverse persone: se da allora non è stato modificato, vuol dire che non hai provato a mettere in pratica ciò che ti è stato consigliato.

    Se non riesci perché hai dei dubbi, devi spiegare i tuoi dubbi. Se hai fatto dei tentativi, devi mostrare quello che hai fatto e che non funziona per suggerirti correzioni.

    Se invece non fai nulla, riproponi sempre lo stesso problema e dici che il codice è rimasto invariato, né esponi cosa non ti è chiaro in quello che hai studiato tra le risorse che ti sono state suggerite, allora stai solo aspettando che qualcuno faccia la cosa al posto tuo.

    09/11/2023 - Maninblack74 ha scritto:


    Inoltre spero che tu sappia che il sottoscritto ha 50 anni e dire a me che non ho voglia o tempo forse sei stato azzardato e non sicuramente rispettoso nei miei confronti. Non sono un bambino e sicuramente ho rispetto per l'essere umano.

    Io ne ho 45, quindi non è che sia molto distante, ma comunque non mi offendo quando mi fanno notare l'ovvio.
    E in ogni caso, l'età anagrafica non ha proprio nulla a che vedere con gli atteggiamenti, parlando anche per esperienza diretta e famigliare.
    Detto questo, non ho offeso nessuno, quindi mi pare scontato fare una manfrina sul rispetto dell'essere umano.

    09/11/2023 - Maninblack74 ha scritto:


    E poi, secondo te, ti mando il codice che IO ho costruito con le mie poche e umili conoscenze per  domandare a voi un codice già fatto?????

    NON PENSO PROPRIO. Ho scritto che vorrei studiare questa datagridview e non “rubare” codici a destra e a manca, non è nel mio stile.

    Non sarà nel tuo stile, ma l'unica cosa che ripeti è che “non riesci”, ma non aggiungi molti dettagli per aiutarti.

    09/11/2023 - Maninblack74 ha scritto:


    Non è vero che trovi questa cosa Ovunque come dici tu, perchè io non la trovo.

    Spero di essere stato chiaro almeno questa volta

    Se ti aspetti di trovare esattamente il codice che ti serve, non è molto diverso dal chiederlo a noi.

    Ribadisco: l'utilità del forum è quella di dare una mano o chiarire dei dubbi se, dopo aver studiato e provato, si incontrano delle difficoltà.

    Non ti sei mosso dal primo tentativo, ti sono stati forniti suggerimenti e link, non è chiaro se li hai guardati, non è chiaro come si è evoluta la situazione dal punto iniziale. Se non si è evoluta, dicci cosa ti ostacola. Ribadire problema e codice già commentato non serve.

    Ma avendo la tua età, immagino che queste cose tu già le sappia.

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    Hai iniziato con applicare il primo consiglio? Al posto del click del Button usa l'evento TextChanged del Textbox in cui ottieni il per fare la ricerca.

    Fatto questo, se funziona vai avanti con prossimo consiglio che hai avuto (ricerca parziale) altrimenti torna qui mostrando cosa non va.

    Inoltre avevi espresso il desiderio di studiare l'oggetto e ti era stata fornita da sql una ottima documentazione. L'hai usata o era tanto per dimostrare volontà…?

    P.S. sono più grande di te… lascia 

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    09/11/2023 - Maninblack74 ha scritto:


    Quel codice riesce a trovare solamente una “riga” per volta e funziona con un button invece quello che io vorrei fare è modificare eventualmente quel codice ma direttamente nella textchanged.

    Ripeto che scrivere una ricerca testo come l'hai fatta tu non ha senso.

    Tuttavia, se è un tuo desiderio, cosa ti impedisce di prendere quello che hai scritto sul button e metterlo sul textxchange?

    Una considerazione: dovresti, più che altro per dare un senso a questa pazzia, evidenziare le celle che contengono il testo scritto nella textbox.

    Un po' come.quando in un file di testo fai “cerca testo” e trovi le parole del testo tutte evidenziate.

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    03/11/2023 - Maninblack74 ha scritto:


    Buongiorno a tutti,

    vi posto un codice che utilizzo per cercare dei dati all'interno delle celle di un DTG tramite un Button e una TextBox:

    Try
     For Each Row As DataGridViewRow In Dtg_lista_prodotti.Rows
    For Each Cell As DataGridViewCell In Row.Cells
     If Cell.Value.ToString = Txt_cerca_prodotto.Text Then
     Dtg_lista_prodotti.CurrentCell = Cell
     End If
      Next
     Next
     Catch ex As Exception
    MsgBox("Articolo non presente: " & ex.Message)
    End Try

    Questo codice lo uso da sempre, però mi limita molto la ricerca perchè prima di tutto occorre inserire tutta la parola ed inoltre cerca solo un prodotto alla volta.

    Quello che io vorrei è evitare il button e ricercare direttamente all'interno della textbox tramite la funzione TextChanged, inoltre non essere costretto ad inserire tutta la parola ma solo alcuni caratteri per ricercare piu' dati e non solo una riga per volta

    Nel web ci sono tanti esempi ma tutti collegati al database io invece vorrei cercare nella DTG stessa.

    E' il primo post per me e vi ringrazio già del vostro aiuto.

    Maninblack74

    Ciao,

    non so quante righe contiene il tuo datagridview, ma hai pensato di cambiare approccio e invece di scorrere le righe e le celle, applicare un filtro alla datagridview? 

    Penso che alla fine i tempi di ricerca possano essere più o meno uguali e forse anche migliori.

    Non ho capito bene se la ricerca viene effettuata sul codice prodotto o sulla descrizione del prodotto… ma a parte questo vorrei farti un esempio per spiegarmi meglio:
    poniamo di ricercare nella datagridview i prodotti per descrizione (è solo un esempio)

    • abbiamo una textbox di nome : 
      • TextBoxSeacrh
    • attiviamo l'evento textchanted : 
      • TextBoxSeacrh_TextChanged
    • abbiamo uan datagridview di nome : 
      • DgvSearch

    Adesso ogni volta che digiti un carattere nella texbox si verifica l'evento : TextBoxSeacrh_TextChanged

    • annulliamo gli spazi della textbox e poniamo il risultato in una variabile stringa di nome : StringFilter

    Esempio:

    Dim stringFilter As String = TextBoxSeacrh.Text.Trim()

    A questo punto :

    • testiamo se il nostro filtro contiene qualcosa : stringFilter <> ""
      • se contiene dei caratteri digitati si applica il filtro alla datagridview :
        • myDescription LIKE % stringFilter %
          • si effettua una ricerca per stringa nella descrizione del prodotto
      • se non contiene caratteri digitati, condizione iniziale e successivamente se si elimina il contenuto della textbox :
        • si imposta il filtro della datagridview = “”

    Esempio:

    If stringFilter <> "" Then
    	Dim dgView As DataView = DirectCast(DgvSearch.DataSource, DataTable).DefaultView
        dgView.RowFilter = String.Format("myDescription LIKE '%{0}%'", stringFilter)
    Else
        DirectCast(DgvSearch.DataSource, DataTable).DefaultView.RowFilter = ""
    End If

    In questo esempio vediamo la datagridview che si popola solo con quelle righe che nella colonna descrizione prodotto contengono i caratteri digitati nella textbox.

    Esempio dell'evento changed:

    ' APPLY FILTER TO DATAGRIDVIEW IF TEXT CHANGES
    Private Sub TextBoxSeacrh_TextChanged(sender As Object, e As EventArgs) Handles TextBoxSeacrh.TextChanged
    ' set search filter string 
    Dim stringFilter As String = TextBoxSeacrh.Text.Trim()
    ' apply filter datagridview
    If stringFilter <> "" Then
    	Dim dgView As DataView = DirectCast(DgvSearch.DataSource, DataTable).DefaultView
        dgView.RowFilter = String.Format("myDescription LIKE '%{0}%'", stringFilter)
    Else
    	' reset filter datagridview
        DirectCast(DgvSearch.DataSource, DataTable).DefaultView.RowFilter = ""
    End If
    End Sub

    E' solo un esempio con un approccio diverso dal tuo e può essere implementato utilizzando degli indici per avere delle performance migliori nel caso tu abbia un datagridview popolato con moltissime righe.

    Ma ad ogni modo era solo per darti un idea come poter riassumere nella datagridview solo le righe che contengono i caratteri che stai digitando nella textbox.

    • Il messaggio di prodotto non trovato lo puoi evitare in quanto se hai digitato una parola che non è contenuta nelle righe della datagridview, ovviamente la stessa si svuota e quindi non avrai nessuna riga da poter selezionare.
    • Mano a mano che digiti nella textbox vedrai diminuire le righe della datagridview fin quando troverai delle corrispondenze

    Un idea per un approccio diverso, valuta e approfondisci l'argomento se può essere di tuo interesse.

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    09/11/2023 - Maninblack74 ha scritto:


    Inoltre spero che tu sappia che il sottoscritto ha 50 anni e dire a me che non ho voglia o tempo forse sei stato azzardato e non sicuramente rispettoso nei miei confronti. Non sono un bambino e sicuramente ho rispetto per l'essere umano.

    ;-)   ambè… potresti essere mio figlio, non pensare di essere poi così anziano 

    Hai fornito pochi elementi o idee da poter sviluppare per cambiare o migliorare il tuo codice ? … vedo che tutti ti hanno indicato una strada possibile da seguire… ma vedo anche che non hai seguito nessuna strada di quelle suggerite.

    Probabilmente o non ti sei spiegato bene e quindi non ritieni i suggerimenti utili al tuo scopo, oppure non  hai compreso bene i suggerimenti.

    Ma non vedo motivi per polemiche inutili, basta chiarirsi che si fa sempre prima.

    E' altresì vero che se non avevi dubbi e/o sapevi cosa fare, non saresti qui ad aprire un thread in merito. 
    Comunque basta capirsi e tutto va come deve andare.

    Scusa se mi sono permesso di entrare in merito alla questione, sono solo mie riflessioni che non contano nulla e prendile come tali.
    ;-)  

  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    Ciao a tutti….

    ho trovato un bel tutorial sul web che insegna ad utilizzare la DatagridView dalle basi, dopo una settimana con diverse prove e con i vostri esempi sono arrivato a questo codice, sembra funzionare…ve lo posto

    Datemi un parere

    grazie Maninblack74

    Dim cmd1 As New OleDbCommand("Select * From DB_MAGAZZINO Where ARTICOLO lIKE '%' +@ID+ '%'", conn1)
            cmd1.Parameters.AddWithValue("@ID", Txt_cerca_prodotto.Text)
            Dim Da As New OleDbDataAdapter
            Da.SelectCommand = cmd1
            Dim DB_MAGAZZINO As New DataTable
            DB_MAGAZZINO.Clear()
            Da.Fill(DB_MAGAZZINO)
            Dtg_lista_prodotti.DataSource = DB_MAGAZZINO
  • Re: [VB.NET]: Cercare all'interno di un DatagridView

    03/11/2023 - Maninblack74 ha scritto:


    Nel web ci sono tanti esempi ma tutti collegati al database io invece vorrei cercare nella DTG stessa

    Avevi scritto così, adesso usi un DB e SQL e ne sei entusiasta … che ti posso dire?

Devi accedere o registrarti per scrivere nel forum
22 risposte