Proseguiamo con la seconda puntata della serie di articoli dedicati all’accesso ai dati con Visual Basic 2010. Questa volta proveremo a visualizzare i dati contenuti in due tabelle del database utilizzando alcuni controlli: una casella di testo ed un DataGridView. Chi non avesse ancora letto la prima puntata, può fare riferimento a questo articolo.
La scheda Origine dati, accessibile cliccando sul menù Dati, Mostra origini dati di Visual Basic 2010, è un’eccellente caratteristica dell’ambiente di sviluppo di Microsoft (altrimenti detto IDE, Integrated Development Environment).
Cliccando su Mostra origini dati, è possibile ottenere una rappresentazione visuale di tutti i dataset che sono stati creati in precedenza e che quindi possono essere impiegati nel progetto in corso di sviluppo. La scheda Origini dati, inoltre, facilita “l’abbinamento” di ciascun dataset ai controlli via a via inseriti nel form (si chiama così ogni finestra dell’applicazione che permette all’utente di inviare uno o più dati da elaborare oppure di interagire con il programma stesso).
Va comunque ricordato, come già sottolineato nella precedente puntata, che un dataset è soltanto una rappresentazione temporanea delle informazioni contenute nella base dati. Ogni dataset, inoltre, ospita solo un sottoinsieme delle tabelle e dei campi che compongono l’intero database: si tratta degli elementi che si sono scelti ricorrendo alla Configurazione guidata origine dati.
Il dataset viene mostrato, all’interno della scheda Origini dati, con una struttura ad albero. Ogniqualvolta si aggiunga un nuovo dataset all’elenco, quest’ultimo verrà inserito sotto forma di nuovo albero. Da una singola applicazione, quindi, risulterà sempre possibile attingere simultaneamente ad una vasta schiera di sorgenti di dati.
Cliccando due volte sulle varie tabelle in elenco nella scheda Origini dati, si potrà visualizzarne i campi corrispondenti (solo quelli selezionati all’atto della creazione del dataset verranno inseriti in lista).
La barra degli strumenti della scheda Origini dati si compone di quattro utili pulsanti: da sinistra verso destra, il primo consente di aggiungere una nuova origine dati, il secondo di aprire la finestra di progettazione per la modifica della struttura del dataset, il terzo di invocare nuovamente la procedura guidata per la riconfigurazione del dataset (aggiunta o rimozione di campi) mentre il quarto di aggiornare il contenuto del dataset.
Collegare i componenti di una form con i campi del database
Nella finestra Origini dati, si cominci col fare doppio clic sulla tabella Customers in modo da ottenere l’elenco dei campi in essa ricompresi.
Cliccando sul campo Company, in corrispondenza della freccia, dovrebbe comparire un menù a tendina identico al seguente:
Nel caso in cui ciò non dovesse accadere (non compare alcuna freccia e nessun menù a tendina in corrispondenza di un qualunque campo), è necessario assicurarsi di aver selezionato la finestra di progettazione delle form dell’applicazione (nel nostro esempio, dovreste ancora visualizzare Form1.vb [Progettazione]).
La maggior parte dei controlli presenti in una form di Visual Basic 2010 (caselle di testo, etichette, menù a tendina, liste,…) supportano la connessione a sorgenti di dati (bound controls): ciò significa che posseggono già le abilità per visualizzare le informazioni memorizzate in un qualunque dataset. Cliccando sul menù a tendina in corrispondenza del campo Company, Visual Basic propone una lista dei componenti più comunemente impiegati in un’applicazione. E’ comunque possibile aggiungere o rimuovere componenti ricorrendo al comando Personalizza.
Nel nostro esempio, proviamo ad usare un semplice controllo TextBox: è sufficiente cliccare sulla voce TextBox quindi trascinare il campo Company sulla form.
Dopo aver rilasciato il tasto sinistro del mouse, Visual Basic provvederà automaticamente ad aggiungere, sulla form principale dell’applicazione in corso di realizzazione, una casella di testo già in grado di visualizzare i dati contenuti presenti nel campo selezionato, all’interno del dataset.
Una barra di navigazione viene poi aggiunta in testa alla finestra: essa permette di muoversi tra un record e l’altro.
Per la gestione degli aspetti legati alla procedura di accesso ai dati, è possibile notare come Visual Basic abbia altresì aggiunto, nella barra inferiore, diversi oggetti.
– Northwind_2007DataSet
E’ il dataset generato in precedenza ricorrendo alla Configurazione guidata origine dati. Può essere considerato come una “rappresentazione” dei campi presenti nel database (Access, in questo caso).
– CustomersBindingSource
Un componente che agisce da “intermediario” tra la tabella Customers e gli elementi della form collegati alla base dati.
– CustomersTableAdapter
e TableAdapterManager
Si tratta di due componenti che si incaricano di “muovere i dati” tra il dataset Northwind_2007DataSet e le tabelle conservate nel database.
– CustomersBindingNavigator
Mette a disposizione i meccanismi per la “navigazione” all’interno del contenuto del database e le proprietà collegate alla barra di navigazione ed alla tabella Customers.
Premendo il tasto F5, cliccando sul pulsante Avvia debug della barra degli strumenti dell’IDE di Visual Basic 2010 oppure selezionando il menù Debug quindi la voce Avvia debug, la nostra applicazione di prova viene compilata ed immediatamente eseguita.
Nella casella di testo, si può subito notare la presenza del nome della prima azienda contenuta nel database (tabella Customers; campo Company).
La barra degli strumenti mostra il numero del record correntemente esposto ed il numero totale dei record presenti nella base dati. I piccoli pulsanti, consentono di passare al primo record, a quello precedente, al successivo ed all’ultimo.
Abbiamo detto che il dataset è solamente una rappresentazione “virtuale” dei dati memorizzati nel database. Ciò è facilmente verificabile: si provi a spostarsi tra i vari record quindi a cancellarne uno a caso cliccando sul pulsante Elimina (il penultimo) della barra di navigazione. Terminando l’esecuzione dell’applicazione di prova (clic sulla “X” della form, in alto a destra) e rieseguendola (Avvia debug), i record indicati come presenti nel database torneranno ad essere 29, così come inizialmente.
Seguendo la stessa procedura che abbiamo seguito per l’aggiunta del campo Company sulla form, aggiungiamo il campo ID della tabella Customers. In questo modo, eseguendo l’applicazione in modalità di debug, verrà visualizzato il codice identificativo (ID) associato a ciascuna società presente nel database, all’interno della tabella Customers.
DataGridView: il contenuto del database in forma tabellare
Si chiama DataGridView il controllo che permette di visualizzare il contenuto di un’intera tabella della base dati. La presentazione dei dati è in forma tabellare e comprende il contenuto di tutti i record della tabella specificata.
Il controllo DataGridView può essere sfruttato per mostare qualunque tipo di dato: testi, numeri, date oppure il contenuto di un array. L’utilizzo del DataGridView è molto interessante perché, poggiando sul “data adapter” e sul dataset, si fa carico di gestire in toto l’interazione con la base dati.
Come primo passo, è bene ampliare – dalla finestra di progettazione – la dimensione del form della nostra applicazione.
Accedendo alla scheda Origini dati, cliccando sulla tabella Orders quindi sulla freccia alla sua destra, apparirà un menù a tendina contenente, come prima voce, proprio DataGridView.
Una volta selezionato DataGridView, trascinando la voce Orders sul form dell’applicazione, apparirà immediatamente una tabella con l’indicazione, su ciascuna colonna, dei campi presenti nel database all’interno della “table” Orders.
Nella barra inferiore, agli oggetti creati poco fa, vengono aggiunti OrdersBindingSource ed OrdersTableAdpter.
Premendo il tasto F5 o selezionando Debug, Avvia debug, apparirà il nome della prima azienda memorizzata nel database (nella tabella Customers), l’ID associato insieme con tutti gli ordini (tabella Orders) effettuati dalla medesima società. “Navigando” nella base dati (servendosi dei tasti freccia contenuti nella barra degli strumenti in alto), si noterà come il contenuto del controllo DataGridView venga aggiornato automaticamente, senza aver scritto una sola riga di codice.
Il contenuto del DataGridView viene aggiornato in forza della relazione uno-a-molti che è stata definita, a livello database, tra la tabella Customers e la tabella Orders (in particolare, tra il campo ID di Customers ed il campo Customer ID della tabella Orders): per ciascun ID univoco (identificativo di un’azienda), vi possono essere “n” ordini associati.
Dopo aver chiuso l’applicazione, tornati alla finestra di progettazione dell’IDE, si provi a cliccare sul controllo DataGridView quindi sulla sua “smart tag” in alto a destra. Visual Basic mostrerà il menù Attività di DataGridView: si tratta di un elenco delle operazioni che è spesso necessario effettuare sullo specifico elemento DataGridView.
Utilizzando le impostazioni ed i comandi offerti da Visual Basic nella finestra delle attività, è possibile variare la tabella del database a cui il controllo DataGridView è collegato ed attivare o disabilitare la modifica dei dati (caselle Abilita aggiunta, abilita modifica ed abilita eliminazione). E’ poi possibile intervenire sulle colonne che vengono mostrate in tabella, “fissare” il controllo DataGridView all’elemento “contenitore” (in questo caso, il form stesso; voce Ancora nel contenitore padre), filtrare i record con una query (Aggiungi query…) e richiedere un’anteprima dei dati attingendo alle informazioni conservate nel database (Anteprima dati…).
Cliccando su Modifica colonne…, si può fare in modo che una o più colonne non vengano mostrate nel DataGridView. Per “nascondere”, ad esempio, la colonna Customer ID, basta evidenziarla quindi cliccare il pulsante Rimuovi.
Dopo aver fatto clic su OK, si noterà l’immediata scomparsa della colonna Customer ID: eliminando le colonne superflue, si avrà così più spazio per le altre informazioni.
E’ interessante notare come a runtime (eseguendo il debug dell’applicazione), si abbia la possibilità di richiedere l’ordinamento alfabetico delle informazioni presenti nella tabella (è sufficiente cliccare sulle varie colonne, in alto). Per impostazione di default, inoltre, all’utente è permesso agire sulla dimensione delle righe e delle colonne ma non sulla posizione delle stesse (a meno che non sia stata spuntata la casella Abilita riordinamento colonne nella finestra Attività di DataGridView).