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

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

  1. #1
    L'avatar di moneyscent
    moneyscent non è in linea Scolaretto
    Post
    51

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

    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:

    codice:
        '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:

    codice:
        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:

    codice:
        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 Very Important Person
    Post
    1,750
    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.

    codice:
                    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 
    Il Crossposting è vietato dalla Netiquette.

    Tutti gli utenti sono invitatati ad indicare nel titolo la versione di VB, Visual Studio o il Framework di compilazione.

    NB: In presenza del SyntaxHighlighter (codice colorato con numeri di riga a lato) prima di copiare il codice eseguire doppio click sulla finestra di codice, altrimenti mancheranno tutti i ritorno a capo.

  3. #3
    L'avatar di moneyscent
    moneyscent non è in linea Scolaretto
    Post
    51
    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?

    codice:
        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
    Post
    51
    Ops, trovato, dovevo invertire anche questo codice:

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


  5. #5
    L'avatar di elisab
    elisab non è in linea Very Important Person
    Post
    1,750
    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.
    Il Crossposting è vietato dalla Netiquette.

    Tutti gli utenti sono invitatati ad indicare nel titolo la versione di VB, Visual Studio o il Framework di compilazione.

    NB: In presenza del SyntaxHighlighter (codice colorato con numeri di riga a lato) prima di copiare il codice eseguire doppio click sulla finestra di codice, altrimenti mancheranno tutti i ritorno a capo.

  6. #6
    L'avatar di moneyscent
    moneyscent non è in linea Scolaretto
    Post
    51
    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 Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi