+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 6 su 6

Procedimento per filtrare i dati di una datagridview sulla base di una textbox.

  1. #1
    L'avatar di moneyscent
    moneyscent non  in linea Scolaretto
    Buon giorno a tutti, e' appena passata la mezza notte.

    Sono qui a pregare qualche buon anima, nella speranza di ottenere un aiuto preciso per farmi capire "come ruota la questione".

    Ebbene:

    Ho una datagridview, popolata correttamente come vi mostrero' nel codice fra breve.
    Nello stesso form che contiene la grid, ho una textbox che vorrei mi filtrasse i dati.
    Per la precisione, le lettere che andro' a digitare, dovranno filtrare i dati della colonna "Nominativo" con
    campo ds_nominativo.

    Ecco le dichiarazioni generali:

        'Dichiarazioni per connessione database
        Public ConnData As New OleDbConnection
        Public SqlDataReader As OleDb.OleDbDataReader
        Public DataAdapter As OleDbDataAdapter
        Public Ds As New DataSet
        Public Bs As New BindingSource
    
    Ecco la procedura che carica la datagridview:

        Public Sub CaricaDatiGriglia(ByVal Griglia As DataGridView)
    
            Dim SqlText As String
    
            'Se il database viene aperto, proseguo con il codice
            If Controllo_Database(PathApp) = False Then MsgBox("Attenzione, la connessione al database non e' andata a buon fine!", MsgBoxStyle.Critical, "Giano - Informazioni") : Exit Sub
    
            With Griglia
    
                .AutoGenerateColumns = False
    
                Try
    
                    'Prelevo le intestazioni
                    'SqlText = "SELECT * FROM vw_datagrid_clienti ORDER BY vw_datagrid_clienti.ds_nome Asc"
    
                    SqlText = "SELECT tb_immagini_datagrid.img_binary, tb_ana_clienti.id_cliente, tb_ana_clienti.ds_nominativo, tb_ana_clienti.fg_privato_azienda, tb_ana_clienti.ds_cf_piva, tb_ana_clienti.ds_via, tb_ana_clienti.ds_num_civico, "
                    SqlText = SqlText + "tb_ana_clienti.ds_cap, tb_ana_clienti.ds_citta, tb_ana_clienti.ds_provincia, tb_ana_clienti.dt_inserimento, tb_ana_clienti.dt_compleanno, tb_ana_clienti.ds_telefono, tb_ana_clienti.ds_cellulare, tb_ana_clienti.ds_email, tb_ana_clienti.ds_riferito"
                    SqlText = SqlText + " FROM tb_immagini_datagrid INNER JOIN tb_ana_clienti ON tb_immagini_datagrid.id_image = tb_ana_clienti.id_image"
                    SqlText = SqlText + " ORDER BY ds_nominativo Asc"
    
                    DataAdapter = New OleDb.OleDbDataAdapter(SqlText, ConnData)
                    DataAdapter.Fill(Ds, "tb_ana_clienti")
    
                    Bs.DataSource = Ds
    
                    .DataSource = Bs
                    .DataMember = "tb_ana_clienti"
    
                    'Disattivo la selezione
                    .ClearSelection()
    
                Catch
    
                    MsgBox(Err.Description)
    
                Finally
    
                    Call ChiudiConnessioneData()
    
                End Try
    
            End With
    
        End Sub
    
    Ora il codice sulla textbox:

        Private Sub TxtNominativo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxtNominativo.TextChanged
            If Len(TxtNominativo.Text) > 0 Then
                Bs.Filter = "ds_nominativo like '%" + TxtNominativo.Text + "%'"
            Else
                Bs.RemoveFilter()
            End If
        End Sub
    
    Ho provato in vari modi anche girando un po' nei vari forum.
    Non riesco a capire cosa c'e' di sbagliato o cosa possa mancare per un eventuale refresh dei dati.
    Vi prego di spendere un po' di tempo anche per farmi capire il funzionamento dei vari strumenti.

    Grazie in anticipo e un saluto particolare ad elisab.

    Ultima modifica di elisab; 27-09-2011 21:41 

  2. #2
    L'avatar di elisab
    elisab non  in linea Scribacchino
    Ciao
    non devi fare nessun refresh devi impostare anche il DataMember del BindingSource sul DataTable da filtrare.

    Imposti come DataSource del bs un DataSet, filtri sulla base del contenuto di uno o pi campi, se non imposti il DataMember non specifichi a quale DataTable nel tuo DataSet applicare il filtro e non importa se nel ds hai solo un dt.

                    DataAdapter = New OleDb.OleDbDataAdapter(SqlText, ConnData)
                    DataAdapter.Fill(Ds, "tb_ana_clienti")
                    
                    Bs.DataMember = "tb_ana_clienti"
                    Bs.DataSource = Ds
    
    Ultima modifica di elisab; 27-09-2011 00:54 
    ℹ️ Leggi di pi su elisab ...

  3. #3
    L'avatar di moneyscent
    moneyscent non  in linea Scolaretto
    Ciao Elisa e grazie per la tua celere risposta.

    Ho impostato il codice con la tua modifica ma in esecuzione mi solleva il seguente errore: "Impossibile trovare la proprieta' DataMember 'tb_ana_clienti' in DataSource",
    Dove ho sbagliato?

        Public Sub CaricaDatiGriglia(ByVal Griglia As DataGridView)
    
            Dim SqlText As String
    
            'Se il database viene aperto, proseguo con il codice
            If Controllo_Database(PathApp) = False Then MsgBox("Attenzione, la connessione al database non e' andata a buon fine!", MsgBoxStyle.Critical, "Giano - Informazioni") : Exit Sub
    
            With Griglia
    
                .AutoGenerateColumns = False
    
                Try
    
                    SqlText = "SELECT tb_immagini_datagrid.img_binary, tb_ana_clienti.id_cliente, tb_ana_clienti.ds_nominativo, tb_ana_clienti.fg_privato_azienda, tb_ana_clienti.ds_cf_piva, tb_ana_clienti.ds_via, tb_ana_clienti.ds_num_civico, "
                    SqlText = SqlText + "tb_ana_clienti.ds_cap, tb_ana_clienti.ds_citta, tb_ana_clienti.ds_provincia, tb_ana_clienti.dt_inserimento, tb_ana_clienti.dt_compleanno, tb_ana_clienti.ds_telefono, tb_ana_clienti.ds_cellulare, tb_ana_clienti.ds_email, tb_ana_clienti.ds_riferito"
                    SqlText = SqlText + " FROM tb_immagini_datagrid INNER JOIN tb_ana_clienti ON tb_immagini_datagrid.id_image = tb_ana_clienti.id_image"
                    SqlText = SqlText + " ORDER BY ds_nominativo Asc"
    
                    DataAdapter = New OleDb.OleDbDataAdapter(SqlText, ConnData)
                    DataAdapter.Fill(Ds, "tb_ana_clienti")
    
                    Bs.DataMember = "tb_ana_clienti"
                    Bs.DataSource = Ds
    
                    .DataSource = Bs
                    .DataMember = "tb_ana_clienti"
    
                    'Disattivo la selezione
                    .ClearSelection()
    
                Catch
    
                    MsgBox(Err.Description)
    
                Finally
    
                    Call ChiudiConnessioneData()
    
                End Try
    
            End With
    
        End Sub
    
    Grazie.

  4. #4
    L'avatar di moneyscent
    moneyscent non  in linea Scolaretto
    Ops, trovato, dovevo invertire anche questo codice:

                    .DataMember = "tb_ana_clienti"
                    .DataSource = Bs
    
    Buona giornata Elisa.


  5. #5
    L'avatar di elisab
    elisab non  in linea Scribacchino
    In genere negli esempi che ho visto se il bs gi collegato al DataTable, il DataMember della dgv non si imposta, sufficiente DataSource della dgv sul bs.
    ℹ️ Leggi di pi su elisab ...

  6. #6
    L'avatar di moneyscent
    moneyscent non  in linea Scolaretto
    Non so che dire Elisa.
    Almeno ora funziona.

    Elisa, mi dai un'occhiata quando puoi anche agli altri thread che ho aperto?

    Grazie.


+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 3
    Ultimo Post: 05-12-2019, 17:18
  2. Filtrare i dati in "foglio dati" in base ad una selezione precedente
    Da Marco_Proietti nel forum Microsoft Access
    Risposte: 0
    Ultimo Post: 29-07-2014, 17:03
  3. Creare maschera che sulla base di una data mi apra altri dati
    Da Cherubinapan nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 07-04-2014, 13:20
  4. Risolto: Ordinare dati di una Datagridview in base a pi colonne
    Da grandissimespillette nel forum Visual Basic .Net
    Risposte: 18
    Ultimo Post: 11-04-2011, 19:26
  5. Filtrare dati in base al precedente
    Da ilpata nel forum Microsoft Word
    Risposte: 3
    Ultimo Post: 21-04-2007, 19:49