DatagridiView filtrare i dati tramite clausola like con VB.Net e C#

Articolo che permette di aggiungere funzionalità utili ai propri programmi gestionali, in particolare al controllo DatagridView.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

 In questo articolo vedremo come realizzare un’applicazione Windows Application, ma potremmo utilizzare il codice anche in ambito web, per filtrare i dati presenti in un controllo DataGridView in base a quanto si sta digitando in una casella di testo.
Può capitare di dotare delle nostre applicazioni di un filtro che posizionato nella pagina o form del nostro applicativo permette all’utente di trovare i dati presenti nella griglia.
L’esempio farà uso della clausola like che nei database più comuni tramite il simbolo % filtra tutto ciò che inizia o finisce o contiene tutto quello che si trova prima, dopo o nel mezzo del testo.
Nell’esempio di codice sarà usato il doppio simbolo %% in modo che seleziona tutto ciò che contiene al suo interno.

Creazione del progetto


Si crea un nuovo progetto in ambito Windows Application con il modello Desktop, nella form che viene visualizzata aggiungiamo un controllo Label con la descrizione del tipo di filtro, una casella di testo, nel quale l’utente digiterà il testo da filtra ed un controllo DatagridView, il tutto come riportato in figura 1.

Figura 1 – La finestra con i dati caricati.

Terminata la predisposizione della parte grafica passiamo alla stesura del codice.
La nostra form è pronta.


Stesura del codice

Facciamo doppio click nella form, in modo che si passa in visualizzazione codice e precisamente nell’evento load della form.
Nell’evento Load della form dobbiamo scrivere il caricamento dei dati, in questo articolo faremo una simulazione con la creazione di un oggetto di tipo DataTable con dei dati fittizi composto da due colonne, una con il nome “Nominativo” con il quale ci saranno i ruoli e l’altro con il nome “Ruolo”.
E’ importante assegnare il nome alle colonne per la gestione dei dati e per il filtro.
Qui di seguito si riporta il frammento di codice per l’evento load per entrambi i linguaggi.

VB.Net
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
Dim Dati As DataTable = New DataTable()
Dim ColonnaNominativo As DataColumn = New DataColumn("Nominativo")
Dim ColonnaRuolo As DataColumn = New DataColumn("Ruolo")
Dati.Columns.Add(ColonnaNominativo)
Dati.Columns.Add(ColonnaRuolo)
Dim riga As DataRow = Dati.NewRow()
riga("Nominativo") = "Emanuele"
riga("Ruolo") = "Presidente"
Dati.Rows.Add(riga)
riga = Dati.NewRow()
riga("Nominativo") = "Luigi"
riga("Ruolo") = "Imprenditore"
Dati.Rows.Add(riga)
riga = Dati.NewRow()
riga("Nominativo") = "Olga"
riga("Ruolo") = "Dirigente"
Dati.Rows.Add(riga)
riga = Dati.NewRow()
riga("Nominativo") = "Stefania"
riga("Ruolo") = "Funzionario"
Dati.Rows.Add(riga)
dataGridView1.DataSource = Dati
dataGridView1.Columns(0).Width = 260
dataGridView1.Columns(1).Width = 260
Catch ex As Exception
MessageBox.Show("Errore: " & ex.Message)
End Try
End Sub
C#
private void Form1_Load(object sender, EventArgs e)
{
try
{
DataTable Dati = new DataTable();
DataColumn ColonnaNominativo = new DataColumn("Nominativo");
DataColumn ColonnaRuolo = new DataColumn("Ruolo");
Dati.Columns.Add(ColonnaNominativo);
Dati.Columns.Add(ColonnaRuolo);
DataRow riga = Dati.NewRow();
riga["Nominativo"] = "Emanuele";
riga["Ruolo"] = "Presidente";
Dati.Rows.Add(riga);
riga = Dati.NewRow();
riga["Nominativo"] = "Luigi";
riga["Ruolo"] = "Imprenditore";
Dati.Rows.Add(riga);
riga = Dati.NewRow();
riga["Nominativo"] = "Olga";
riga["Ruolo"] = "Dirigente";
Dati.Rows.Add(riga);
riga = Dati.NewRow();
riga["Nominativo"] = "Stefania";
riga["Ruolo"] = "Funzionario";
Dati.Rows.Add(riga);
dataGridView1.DataSource = Dati;
dataGridView1.Columns[0].Width = 260;
dataGridView1.Columns[1].Width = 260;
}
catch (Exception ex)
{
MessageBox.Show("Errore: " + ex.Message);
}
}

Ora passiamo in visualizzazione grafica, dovremmo scrivere il codice che mentre si digita il testo nella casella di testo, viene effettuato il filtro.
In visualizzazione grafica, facciamo doppio click sul controllo casella di testo, in modo che ci passa in visualizzazione codice nell’evento “TextChanged” .
Dopo aver effettuato la conversione della proprietà Datasource in DataTable, utilizzando la proprietà RowFilter tramite la clausola Like vengono caricati i dati che contengono il testo presente nella casella di testo.
La proprietà RowFilter fa parte della proprietà DefaultView.


Qui di seguito si riporta il codice per entrambi i linguaggi di programmazione più usati in ambito .Net

VB.Net
Private Sub textBox1_TextChanged(sender As Object, e As EventArgs) Handles textBox1.TextChanged
Dim Dati As DataTable = CType(dataGridView1.DataSource, DataTable)
Dati.DefaultView.RowFilter = String.Format("[{0}] LIKE '%{1}%'", "Nominativo", textBox1.Text)
End Sub
C#
private void textBox1_TextChanged(object sender, EventArgs e)
{
DataTable Dati = (DataTable)dataGridView1.DataSource;
Dati.DefaultView.RowFilter = string.Format("[{0}] LIKE '%{1}%'", "Nominativo", textBox1.Text);
}

Conclusioni

L’articolo ha voluto fornite una tecnica molto semplice ma efficiente di come aggiungere alle nostre applicazioni la possibilità di dotarle di funzionalità aggiuntive molto utili come il filtro dei dati.
Impostare un software con schermate amichevoli permette all’utente di utilizzare il programma in maniera piacevole ma soprattutto fornire tutto il necessario per lavorare nel modo migliore.
I DataTable contengono metodi e proprietà molto interessanti fornendo al programmatore la facilità di effettuare operazioni sui dati in maniera semplice.