27.06.2014 Views

Informatica Medica

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Informatica</strong> <strong>Medica</strong><br />

11. DataBinding – DataSet – Uso<br />

delle form<br />

Prof. Mauro Giacomini


Sommario<br />

• Tecniche di DataBinding<br />

• Introduzione<br />

• Concetti generali<br />

• DataBinding e navigazione del DataSet<br />

• BindingContext e relazioni tra DataTable<br />

• Esempi di uso<br />

• Uso delle form<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


DataBinding<br />

• DataBinding: processo che lega un controllo visuale<br />

a una struttura dati di un DataSet.<br />

• Tecnica usata per visualizzare in una form, in modo<br />

rapido ed efficace i contenuti di un DataSet (senza<br />

scrivere codice)<br />

• Consente la sincronizzazione automatica del<br />

contenuto di vari oggetti del form con le rispettive<br />

strutture di dati<br />

• Se controlli si collegano a strutture dati collegate<br />

con le relazioni anche i loro contenuti si aggiornano<br />

automaticamente<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


DataBinding semplice o<br />

complesso<br />

• Semplice: legame tra una singola<br />

informazione del DataSet e una particolare<br />

proprietà di un controllo (una colonna, una<br />

proprietà text)<br />

• Complesso: legame tra un controllo e una<br />

collection di dati contenuta in una struttura<br />

di DataSet<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


DataBinding di sola lettura o<br />

anche di scrittura<br />

• Sola lettura: legame per pura<br />

visualizzazione, i cambiamenti non sono<br />

riportati (almeno non in modo<br />

automatico) nel DataSet<br />

• Anche di scrittura: controllo –<br />

interfaccia di scambio dati fra form e<br />

DataSet<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


BindingContext (1)<br />

• Consente di mantenere la sincronizzazione fra le<br />

informazioni nei controlli e le collection dei dati<br />

• Currency: capacità del BindingContext di<br />

posizionare l’indice di ogni collection in<br />

corrispondenza dell’oggetto correntemente<br />

selezionato all’interno del DataSet.<br />

• Es: alcuni controlli TextBox sono collegati all’oggetto il cui<br />

indice è mantenuto dal BidingContext, se cambia questo<br />

indice tutti i controlli visualizzeranno i dati corrispondenti<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


BindingContext (2)<br />

• Dependency: capacità di mantenere le<br />

relazioni di dipendenza tra più collection.<br />

• Es: nel DataSet, due DataTable collegate da una<br />

DataRelation; il BidingContext fa si che gli<br />

oggetti collegati al DataTable figlio si aggiornino<br />

automaticamente se cambia l’oggetto<br />

selezionato nel DataTable padre.<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


Esempi di applicazioni (1)<br />

• Con TextBox (DataBinding semplice):<br />

• txtID.DataBindings.Add(“Text”,myDataSet.Tables(“Farmaci”),<br />

“Id_Farmaco”)<br />

• Con ComboBox (DataBinding complesso):<br />

• Fonte di dati:<br />

• Cmb_Tipi.DataSource=myDataSet.Tables(“Tipi_Farmaci”)<br />

• Campo da visualizzare:<br />

• Cmb_Tipi.DisplayMember= “Tipo_Farmaco”<br />

• Campo legato dal DataBinding:<br />

• Cmb_Tipi.ValueMember= “Id_Tipo_Farmaco”<br />

• DataBinding finale:<br />

• Cmb_Tipi.DataBindings.Add(“SelectedValue”,myDataSet.Tables(“Far<br />

maci”), “Id_Tipo_Farmaco”)<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


Esempi di applicazioni (2)<br />

• Per sincronizzare l’elemento selezionato nella lista<br />

con i dati degli altri controlli si deve scrivere del<br />

codice da eseguire quando cambia l’indice dell’item<br />

selezionato dalla lista:<br />

• L’indice della nuova posizione viene memorizzato<br />

• La posizione corrente all’interno del BindingContext è<br />

determinata valorizzando la proprietà position<br />

• Controllo di lettura solo sui controlli stessi<br />

• Per terminare la modifica va chiamato il metodo<br />

EndEdit relativo al DataRow individuato all’interno<br />

della DataTable dalla proprietà Position<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


Aspetti da modificare a mano<br />

• Definire i legami tra i controlli dei form<br />

e i dati del DataSet<br />

• Controllare che la navigazione tra i<br />

controlli del form garantisca la currency<br />

e la depency del BidingContext.<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


DataGrid<br />

• Consente di navigare all’interno di strutture<br />

complesse rispettando le gerarchie e le<br />

relazioni fra i diversi DataTable<br />

• Navigazione intuitiva con il metodo della<br />

crocetta<br />

• Si può anche bloccare ad una sola tabella<br />

con dichiarazioni esplicite (in questo caso<br />

conviene usare la datagrid view)<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


Colonne espressioni<br />

• Le colonne di un DataTable possono<br />

contenere anche valori dinamici, calcolati<br />

con formule<br />

• Formula: espressione valida scritta in<br />

sintassi di .NET<br />

• Il testo deve essere assegnato alla proprietà<br />

expression della colonna che conterrà il<br />

valore calcolato<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


Informazioni nelle colonne<br />

espressioni<br />

• Valori risultanti dal calcolo di dati<br />

contenuti in colonne della stessa tabella<br />

• Valori risultanti dall’aggregazione di<br />

valori contenuti in colonne di record<br />

diversi e di tabelle correlate<br />

• Risultati di operazioni di confronti logici<br />

fra dati contenuti nelle altre colonne<br />

della tabella<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

La parte fondamentale del disegno di<br />

una qualsiasi applicazione è la<br />

progettazione dell'interfaccia tra il<br />

computer e la persona che lo utilizza.<br />

I componenti fondamentali per la<br />

creazione dell'interfaccia sono i form<br />

e i controlli.<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

• Il form (letteralmente "forma", "immagine", ma in questo<br />

caso indica genericamente la "finestra" di Windows) è<br />

l'elemento centrale di ogni applicazione<br />

• Un form, infatti, costituisce la base dell'interfaccia utente:<br />

è in un form che vengono inseriti tutti gli altri controlli<br />

siano essi pulsanti, caselle di testo, timer, immagini, ecc.<br />

• Un form è prima di tutto un oggetto e, come tale, dispone<br />

di proprietà che ne definiscono l'aspetto, di metodi e di<br />

eventi che permettono di determinare, tra le altre cose,<br />

l'interazione con l'utente.<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

Proprietà fondamentali:<br />

• BorderStyle permette di definire l'aspetto del bordo<br />

della finestra. I valori che può assumere sono 7:<br />

None, Fixed Single, Fixed3D, Sizable, Fixed<br />

Dialog, Fixed ToolWindow e Sizable ToolWindow. I<br />

valori più usati sono Sizable (predefinito, vengono<br />

visualizzati tutti i pulsanti, di riduzione ad icona,<br />

ingrandimento e chiusura, nonché la barra del<br />

titolo) e Fixed Dialog (form a dimensione fissa,<br />

vengono visualizzati il pulsante di chiusura e la<br />

barra del titolo).<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

• Text permette di specificare la stringa da<br />

visualizzare nella barra del titolo del form.<br />

• Icon consente di selezionare l'icona che<br />

contraddistinguerà il form. Per inserire un'icona, è<br />

necessario utilizzare la finestra delle Proprietà e<br />

cliccare sul pulsante con i tre puntini che appare<br />

quando si seleziona la proprietà Icon: così facendo<br />

verrà mostrata la finestra di dialogo Carica icona,<br />

in cui selezionare il file dell'icona (estensione .ICO)<br />

desiderata.<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

Passiamo ora agli eventi più utilizzati, nell'ordine<br />

in cui vengono generati.<br />

• L’evento Initialize è il primo evento nella vita del<br />

form e si verifica non appena il codice fa<br />

riferimento al nome del form, prima ancora che<br />

vengano creati la finestra e i controlli<br />

• Nella procedura di risposta a questo evento<br />

viene normalmente inserito il codice di<br />

inizializzazione delle variabili del form<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

Quando si verifica l'evento Load, tutti i<br />

controlli inseriti nel form sono stati creati,<br />

anche se la finestra non viene ancora<br />

visualizzata; è questo, uno degli eventi più<br />

utilizzati, dal momento che di solito<br />

contiene il codice che si vuole venga<br />

eseguito quando si carica un form:<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

L'evento Resize viene generato<br />

immediatamente prima che il form diventi<br />

visibile ed ogni volta che la finestra viene<br />

ridimensionata, sia trascinando i suoi<br />

bordi, sia ingrandendola, riducendola ad<br />

icona e ripristinandola:<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

• Un altro evento potrebbe venire provocato prima che il form<br />

diventi pienamente funzionale: l’evento Paint, che non si<br />

verifica se viene impostata la proprietà AutoRedraw del form<br />

a True<br />

• Nella procedura di risposta all’evento Paint viene<br />

generalmente disegnata la grafica del form con metodi quali<br />

Print, Line, Circle, Point Cls e così via.<br />

• La procedura di evento Paint viene eseguita se il form deve<br />

essere aggiornato, quando l’utente ingrandisce il form o ne<br />

scopre nuove aree<br />

• Non si verifica se l’utente restringe il form<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

• L’evento Deactivate si verifica quando l’utente<br />

passa ad un altro form dell’applicazione. Il form<br />

riceve un evento Deactivate e riceve un altro<br />

evento Activated quando ottiene di nuovo lo stato<br />

attivo.<br />

• La stessa sequenza viene prodotta se viene resa<br />

temporaneamente invisibile un form impostando la<br />

sua proprietà Visible a False o chiamando il suo<br />

metodo Hide<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

L'evento FormClosing si verifica nel momento in cui<br />

un form sta per essere scaricato, cioè rimosso dalla<br />

memoria. Tale evento può essere utilizzato per<br />

impedire che la finestra venga effettivamente chiusa,<br />

al verificarsi di particolari situazioni, impostando il<br />

parametro Cancel dell'oggetto<br />

FormClosingEventArgs a True, invece l’evento<br />

FormClosed si verifica successivamente e può<br />

essere usato solo per liberare le risorse<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14


L’oggetto Form<br />

• Per rendere visibile un form, si deve richiamare il metodo<br />

Show<br />

• I form espongono una speciale proprietà: Controls,<br />

che restituisce una collection contenete tutti i controlli<br />

caricati sul form al momento.<br />

• Questa collection permette spesso di semplificare il<br />

codice nei moduli form ed è la chiave di alcune tecniche<br />

di programmazione che altrimenti sarebbero impossibili<br />

Inf. Med. - 11. DataBinding e<br />

DataSet - A.A. 2013/14

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!