Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 37 di 43
  • livello principiante
Indice lezioni

Componenti per la manipolazione dei dati (Data-Aware)

Come utilizzare i componenti data-aware messici a disposizione da Delphi per visualizzare, aggiungere, modificare, cancellare dati dai databases a cui ci siamo connessi tramite gli oggetti visti nella sezione precedente
Come utilizzare i componenti data-aware messici a disposizione da Delphi per visualizzare, aggiungere, modificare, cancellare dati dai databases a cui ci siamo connessi tramite gli oggetti visti nella sezione precedente
Link copiato negli appunti

Dopo aver trattato i componenti per l'accesso alle sorgenti di dati,
passiamo ora a vedere i componenti che ci permettono di interagire in maniera visuale con
i dati provenienti da queste sorgenti dati. Come visibile nell'immagine qui sotto, questi
componenti sono raccolti nella pagina "Data Controls" della Component Palette.

CP_D_Control.jpg (4765 byte)

Questa pagina ci mette a disposizione una griglia, una barra per la navigazione
all'interno dei nostri datasets, una etichetta collegata direttamente ad un campo di un
dataset, una casella di edit, un memo, un componente immagine da collegare direttamente al
campo del nostro dataset per visualizzare l'immagine in esso contenuta, una casella
combinata, una lista, una casella spuntabile per valori booleani, un gruppo di componenti
per selezioni esclusive, una casella di lookup, una lista di lookup, un componente per
formato RTF, una griglia di controllo, una componente per la visualizzazione dei dati in
forma grafica (Torte, Istogrammi, ...). Si tratta di componenti Data-Aware, ovvero
componenti che si collegano direttamente alla sorgente di dati e che automaticamente
gestiscono la visualizzazione, la modifica. Questi componenti vengono collegati al dataset
indirettamente, ovvero vengono collegati ad un datasource che fa riferimento al dataset
interessato.

Come per gli oggetti per l'accesso alle sorgenti di dati, daremo uno sguardo alle
proprietà e metodi principali e più utilizzati di questi componenti. Segue un elenco dei
nomi dei componenti e le loro rispettive classi: DBGrid (tdBGrid), DBNavigator
(tdBNavigator), DBLabel (tdBLabel), DBEdit (tdBEdit), DBMemo (tdBMemo), DBListBox
(tdBListBox), DBComboBox (tdBComboBox), DBCheckBox (tdBCheckBox), DBRadioGroup
(tdBRadioGroup), DBLookupListBox (tdBLookupListBox), DBLookupComboBox (tdBLookupComboBox),
DBRichEdit (tdBRichEdit), DBCtrlGrid (tdBCtrlGrid), DBChart (tdBChart).

tdBGrid

L'oggetto DBGrid permette di visualizzare e manipolare i records di un dataset in una
griglia tipo quella utilizzata da programmi come MS Excel. Questo oggetto deriva da
TCustomDBGrid che a sua volta deriva da TCustomGrid. tratteremo solamente le proprietà ed
i metodi relativi all'oggetto TCustomDBGrid poichè la classe tdBGrid non aggiunge alcun
metodo o proprietà, ma espone solamente i metodi della classe da cui deriva, appunto
TCustomDBGrid.

Ecco l'elenco delle proprietà dell'oggetto DBGrid: Columns, DataSource,
Defaultdrawing, FieldCount, Fields, Options, ReadOnly, SelectedRows, Titlefont,
borderStyle, FixedColor.

La proprietà Columns, di tipo tdBGridColumns,
permette di definire le colonne che verranno visualizzate nella griglia. Questa proprietà
è un elenco di oggetti TColumn che definiscono le proprietà delle varie colonne che
andranno a formare la tabella, a partire dal campo del dataset a cui si riferisce la
colonna, al colore del titolo, l'allineamento del testo etc... Per modificare la
proprietà Columns, è disponibile un editor di proprietà, avviabile, come sempre,
attraverso il bottone con i tre puntini nel Object Inspector. Se non vengono definite
delle colonne per la griglia, verranno automaticamente visualizzate tante colonne quanti
sono i campi visibili del dataset.

La proprietà DataSource è quella che
permette di impostare il riferimento all'oggetto DataSource che a sua volta si riferisce
al dataset (table, Query).

Defaultdrawing indica se le celle della
griglia verranno disegnate automaticamente oppure il loro disegno verrà personalizzato
attraverso i gestori di eventi OnDrawColumnCell o OnDrawDataCell. Se impostato su true
l'oggetto griglia si occuperà direttamente del disegno dei dati nella cella, dal colore
di sfondo, al font, al valore dei dati, se impostato su false, verrà gestito dall'oggetto
griglia solamente il disegno dello sfondo, il disegno dei valori dei dati è demandato ai
gestori di eventi OnDrawColumnCell o OnDrawDataCell.

FieldCount è una
proprietà che indica il nome dei campi, ovvero delle colonne, visualizzate nella griglia.

La proprietà Fields permette di accedere in forma indicizzata i campi
corrispondenti alle colonne visualizzate, come per la proprietà Fields dell'oggetto table.

Attraverso la proprietà Options è possibile definire alcune
caratteristiche funzionali e grafiche della griglia. Alcune di esse sono la possibilità
di editare il contenuto della griglia, la visualizzazione di un indicatore di riga, la
visualizzazione dei titoli al disopra delle colonne, la possibilità di selezionare
un'intera riga della griglia, effettuare una selezione su più righe, richiedere la
conferma prima di eliminare un record dal dataset.

I valori disponibili per la proprietà
sono: dgEditing, dgAlwaysShowEditor, dgAlwaysShowEditor, dgRowSelect, dgTitles,
dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect,
dgAlwaysShowSelection, dgConfirmDelete, dgCancelOnExit, dgMultiSelect.

La proprietà ReadOnly,
è autoesplicativa, ovvero permette di impostare in sola lettura il contenuto della
griglia così da impedirne la modifica.

SelectedRows, riporta un elenco
di Bookmark (Segnalibri che vengono utilizzati per segnare una posizione come selezionata
all'interno della griglia) corrispondenti alle posizioni selezionate nella griglia.

La
proprietà Titlefont permette di impostare il font per le celle
contenenti i titoli delle colonne.

Attraverso la proprietà borderStyle,
si può definire il tipo di bordo disegnato intorno alla griglia.

In ultima, la proprietà
FixedColor definisce il colore delle celle della griglia che rimangono
fisse durante lo scorrimento della stessa.

Dopo aver visto le proprietà passiamo ora ai metodi. Eccone l'elenco:
DefaultdrawColumnCell, DefaultdrawDataCell.

DefaultdrawColumnCell viene
utilizzato all'interno di un gestore di evento OnDrawColumnCell per il disegno del testo.
Il risultato della chiamata a DeafulDrawColumnCell è lo stesso che impostare la
proprietà Defaultdrawing a true, tranne per il fatto che che non viene disegnato il
rettangolo di fuoco della cella.

DefaultdrawDataCell è l'equivalente di
DefaultdrawColumnCell tranne per il fatto che in questo non vi è un riferimento alla
colonna a cui appartiene la cella.

tdBNavigator

Il componente DBNavigator, è un componente visuale che permette di facilitare lo
spostamento all'interno di dataset mettendo a disposizione una barra contenente dei
pulsanti corrispondenti alle tipiche funzioni di spostamento. Ci si può spostare in
avanti, in dietro, alla prima posizione, all'ultima, aggiungere una nuova posizione,
eliminare quella corrente, annullare le modifiche apportate ai dati.

Le proprietà di DBNavigator sono accessibili quasi completamente dall'Object Inspector
a design-time e sono: ConfirmDelete, DataSource, Flat, Hints, VisibleButtons.

ConfirmDelete
permette di specificare se verrà richiesta la conferma per l'eliminazione del record
oppure no. Impostando questa proprietà a true, verrà presentata una finestra di dialogo
attraverso la quale sarà possibile decidere se continuare con l'eliminazione oppure
annullare l'operazione. DataSource è la proprietà che serve ad indicare
quale è il dataset a cui fa riferimento l'oggetto DBNavigator.

La proprietà Flat
ha lo scopo di definire l'aspetto dei pulsanti della barra di navigazione, ovvero se
questi avranno uno stile piatto oppure tradizionale.

Attraverso la proprietà Hints
si può definire il contenuto dei tooltip che vengono visualizzati quando ci si ferma
sopra i pulsanti della barra. Questa proprietà potrebbe essere utilizzata per esempio per
visualizzare in italiano la funzione dei vari pulsanti della barra visto che di default il
testo visualizzato è in inglese.

L'ultima proprietà è quella che definisce quali
pulsanti visualizzare nella barra. Non sempre sono necessari tutti i pulsanti presenti
nella barra, ad esempio potrebbero servire solamente i pulsanti di spostamento e non
quelli di inserimento, modifica ed eliminazione. tramite VisibleButtons, di tipo
TButtonSet, è possibile specificare l'elenco dei pulsanti da visualizzare.

Per quanto riguarda i metodi dell'oggetto DBNavigator, interessante è il metodo BtnClick
che permette di eseguire la funzione associata al pulsante nella barra di navigazione,
come se il pulsante fosse stato premuto dall'utente. Questo metodo accetta come parametro
il tipo di pulsante che di cui si vuole simulare la pressione (nbFirst, nbPrior, nbNext,
nbLast, nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh). L'esecuzione del metodo
attiva comunque l'evento OnClick dell'oggetto DBNavigator.

tdBText

L'oggetto DBText è un oggetto visuale che permette di visualizzare il contenuto
testuale di un campo di un dataset. Attraverso questo oggetto l'utente nonpuò modificare
il contenuto del campo visualizzato.

Le proprietà dell'oggetto DBText sono: Autosize, DataField, DataSource.

La proprietà Autosize
dell'oggetto DBText indica se la dimensione dell'oggetto viene modificata automaticamente
rispecchiando la dimensione del testo da visualizzare. Impostare Autosize a false a volte
è utile per impedire che il testo da visualizzare vada a sovrapporsi ad altri controlli
nelle schermate del programma.

DataField contiene il nome del campo del
dataset di cui verra visualizzato il contenuto.

DataSource conterrà il riferimento
all'oggetto DataSource a cui è collegato il dataset a cui collegare
l'oggetto DBText.

tdBEdit

tdBEdit è un oggetto visuale rappresentante una casella di testo dove è possibile
visualizzare, inserire, modificare del testo contenuto in un campo di un dataset. Questo
oggetto deriva da altri oggetti non connessi direttamente a datasets come CustomMaskEdit e
CustomEdit. Per le proprietà ereditate da questi oggetti si rimanda alla guida in linea.

Come per altri oggetti connessi ai dataset, le proprietà più importanti sono
DataField, DataSource e ReadOnly. Per le prime due il significato è lo stesso degli
oggetti visti in precedenza, ReadOnly è presente, come nel nostro caso,
in quei componenti che permettono la modifica dei dati. Attraverso questa proprietà,
impostando il suo valore a true, si impedisce la modifica dei dati visualizzati nel solo
componente DBEdit interessato.

tdBMemo

Il componente DBMemo è simile al componente DBEdit, ha la funzione di visualizzare il
testo contenuto in un campo di un dataset con la differenza che il testo viene
visualizzato su più righe. Le proprietà fondamentali sono le stesse dell'oggetto DBEdit,
mentre per le proprietà relative all'oggetto TCustomMemo, da cui DBMemo deriva,
consultare la guida in linea.

tdBImage

L'oggetto DBImage viene utilizzato per visualizzare ed inserire immagini in un campo di
un dataset. Solitamente questo oggetto viene collegato a campi di tipo blob.

Oltre alle proprietà comuni a tutti i componenti data-aware, l'oggetto DBImage
possiede le seguenti proprietà: AutoDisplay, borderStyle, Center, Picture, QuickDraw,
Stretch.

La proprietà AutoDisplay, indica se l'immagine contenuta nel
campo viene automaticamente caricata e visualizzata. Impostando questa proprietà a false,
per visualizzare l'immagine sarà necessario effettuare un doppio click sull'oggetto
oppure selezionare l'oggetto e premere enter.

Attraverso borderStyle è
possibile definire l'aspetto del bordo dell'immagine che può essere: bsNone, bsSingle,
bssizeable, bsDialog, bsToolWindow, bssizeToolWin.

La proprietà Center
indica se l'immagine verrà visualizzata al centro dell'oggetto DBImage. Per ovvi motivi,
questa proprietà non avrà alcun effetto se la proprietà Stretch sarà impostata a true.

La proprietà Picture contiene un riferimento all'immagine contenuta nel
campo del dataset. Questa proprietà risulta molto utile per caricare una immagine nel
campo blob oppure per salvare su file il contenuto del campo blob stesso. Per maggiori
informazioni sui metodi e sulle proprietà dell'oggetto Picture consultare la guida in
linea riguardo alla classe TPicture.

Attraverso QuickDraw, è possibile
velocizzare la visualizzazione dell'immagine, disabilitando l'utilizzo di una palette di
colori, ottenendo però una qualità inferiore dell'immagine. Impostando questa proprietà
a false, verrà utilizzata una palette di colori per permettere una visualizzazione
migliore dell'immagine, introducendo dei ritardi di visualizzazione causati
dall'elaborazione più complessa. La proprietà Stretch permette di
indicare se l'immagine visualizzata verrà riadattata alle dimensioni dell'oggetto DBImage
effettuando appunto un stretching, con conseguente probabile deformazione o perdita di
definizione dell'immagine.

I metodi dell'oggetto DBImage sono: CopyToClipBoard, CutToClipBoard, LoadPicture,
PasteFromClipBoard. I metodi relativi alla clipboard (gli appunti di Windows) sono
abbastanza autoesplicativi e servono appunto a copiare ed a tagliare il contenuto
mettendolo nella clipboard o ad incollarlo prelevandolo da essa.

LoadPicture
ha lo scopo di caricare l'immagine dal campo del dataset. Questo metodo è necessario per
visualizzare il contenuto dell'immagine se la proprietà AutoDisplay è stata impostata
false.

tdBListBox, tdBComboBox, tdBRichEdit, tdBCheckBox, tdBRadioGroup

Per tutti questi componenti, non esistono particolari proprietà o metodi all'infuori
di quelli già visti comuni a tutti i componenti Data-Aware (DataSource, DataField, etc.).
Pertanto per le proprietà di questi controlli si rimanda alla guida in linea di Delphi.
L'unica differenza interessante tra la versione non Data-Aware e la versione standard
riguarda il controllo tdBRadioGroup che possiede una proprietà Values
che ha lo scopo di permettere l'assegnazione di valori personalizzati da salvare nel campo
del Dataset. Questa proprietà è di tipo TStrings e se non vengono definiti dei valori
per essa, nel campo dele dataset verrà salvato l'indice, in base 0, della voce
selezionata.

tdBLookupListBox, TLookupComboBox

Questi due controlli, sono in tutto simili ai rispettivi tdBListBox e tdBComboBox
tranne per il fatto che i valori riportati nelle liste di scelta, provengono da un
dataset. Questi controlli sono collegati a due dataset: uno è il dataset di lavoro (dove
vengono inseriti i valori del controllo) e l'altro quello da dove vengono recuperati i
valori che appaiono nelle liste di scelta. Per quanto riguarda il collegamento al dataset
principale, non c'è nulla di nuovo da dire, il collegamento segue le regole già viste.
Per il dataset di origine dei valori delle liste, ci troviamo di fronte a delle nuove
proprietà che sono comuni a tutti quei componenti di tipo lookup che derivano da
tdBLookupControl.

Queste proprietà sono: KeyField, KeyValue, ListField, ListFieldIndex, ListSource.
Tutte queste proprietà, all'infuori di KeyValue, sono accessibili a design-time tramite
l'Object Inspector.

KeyField è di tipo string e indica il campo del
dataset sorgente per la lista da cui verranno estratti i dati da inserire nel campo del
dataset principale indicato da DataField.

KeyValue contiene il valore del
campo indicato in KeyField. Esso non corrisponde al valore visualizzato dal controllo.
Assegnando a questa proprietà un valore, il controllo effettuerà una ricerca all'interno
del dataset sorgente per la lista alla ricerca di un record il cui contenuto del campo
riportato in KeyField corrisponde al valore riportato in KeyValue.

ListField,
è di tipo string e contiene il campo del dataset sorgente per la lista il cui valore
sarà visualizzato dal controllo. Nel caso di tdBLookupComboBox, sara il campo i cui
valori appariranno nella lista a discesa visualizzata dal controllo.

ListFieldIndex
indica l'indice che verrà utilizzato per ordinare la lista dei valori visualizzati dal
controllo.

ListSource contiene il riferimento al datasource che si
riferisce al dataset sorgente per la lista di valori.

tdBCtrlGrid

Questo controllo è particolare ma molto utile per creare una visualizzazione
particolare del contenuto dei records di un dataset. Esso permette di raggruppare in
pannelli i contenuti dei records di un dataset, permettendo di disporre a piacere i
controlli che effettivamente visualizzano il contenuto dei campi dei records.
A differenza
degli altri componenti data-aware che visualizzano o gestiscono direttamente il contenuto
dei campi dei records, il controllo DBCtrlGrid non possiede, ovviamente, la proprietà
FieldName. Questo controllo lavora con i records piuttosto che con i campi dei records.
Infatti se viene posto in una form un controllo DbCtrlGrid senza inserirvi degli altri
controlli data-aware all'interno che gestiscano il contenuto dei campi dei records non si
vedrà apparire nulla all'interno di esso. tra le caratteristiche impostabili di questo
controllo vi è la possibilità di scegliere il numero di righe e colonne, l'orientamento,
la dimensione dei pannelli ed altre caratteristiche.

Ecco le proprietà principali di questo controllo: AllowDelete, AllowInsert, Canvas,
ColCount, DataSource, EditMode, Orientation, Panelborder, PanelCount, PanelHeight,
PanelIndex, Panelwidth, RowCount, SelectedColor, ShowFocus.

Le proprietà AllowDelete
e AllowInsert indicano se il controllo può permettere all'utente
l'inserimento di un nuovo record oppure l'eliminazione di quello corrente.
Queste due
operazioni possono essere effettuate attraverso la pressione rispettivamente dei tasi
Ctrl+Delete e Ctrl+Insert sulla tastiera quando il controllo possiede il fuoco.

La
proprietà Canvas, disponibile solamente a run-time, permette di accedere
al controllo Canvas che gestisce la grafica dei pannelli della griglia.

ColCount
e RowCount, permettono di specificare rispettivamente il numero di
colonne e di righe che verranno rappresentati contemporaneamente nel controllo. Queste
proprietà definiscono altresì il numero di pannelli visibili nella griglia.
Questo
valore è reperibile nella proprietà PanelCount disponibile a run-time.
DataSource definisce il riferimento alla sorgente dati collegata al dataset a cui la
griglia sarà collegata.

EditMode permette di stabilire la modalità di
funzionamento della griglia, ovvero se questa può permettere l'inserimento l'eliminazione
e la modifica dei records, un po' come la proprietà ReadOnly di altri controlli.

Panelborder
definisce lo stile del bordo dei pannelli nella griglia. I valori possibili sono gbNone o
gbRaised.

Attraverso le proprietà PanelHeight e Panelwidth
è possibile definire le dimensioni dei pannelli, rispettivamente altezza e larghezza.

SelectedColor definisce il colore che verrà utilizzato per indicare il pannello
corrispondente al record corrente nel dataset.

In ultimo ShowFocus permette di indicare se
il controllo DBCtrlGrid deve disegnare un rettangolo di fuoco attorno al pannello
corrispondente al record corrente quando il controllo ha il fuoco.


Ti consigliamo anche