Lavorare con il controllo Grid
in Visual dBASE
7.01
Ultima Modifica: 21 Marzo 1999
Ken
Mayer, Senior SQA Engineer
dBASE, Inc.
Questo documento è da considerare
come una breve guida pratica sull'oggetto grid...
Prima di
Partire
Se state per progettare una scheda che usa il nuovo
controllo (oggetto) Grid in Visual dBASE 7.xx (7.0, 7.01...) e desiderate avere
un controllo da programma o di altro tipo su tale oggetto, qui ci sono alcuni
passi che dovete seguire (in questo documento si presume che avete il vostro/i
oggetto/i query/queries o modulo/i dati sulla scheda).
Scheda con Oggetto
query
In modalità progettazione visualizzate la "tavolozza componenti" selezionate l'oggetto grid e trascinatelo sulla scheda.
Tavolozza Componenti -
Oggetto Grid
La scheda precedente dopo aver
trascinato l'oggetto grid
A questo punto impostate la proprietà
dataLink dell'oggetto grid selezionando il rowset che desiderate visualizzare,
così facendo l'oggetto grid dovrebbe visualizzare tutte le colonne del vostro
rowset, ma in effetti voi non avete ancora un reale controllo
sull'oggetto.
Impostazione proprietà
"datalink" dell'oggetto grid
Scheda dopo aver selezionato il
rowset
Quindi tramite il modulo "Ispezione"
cliccate sulla proprietà "columns". Notate che mostra la parola "oggetto" in
grassetto, il pulsante "strumento" e il pulsante "Ispeziona" .
Cliccate sul
pulsante ,
selezionate le colonne che desiderate visualizzare nell'ordine che volete
e poi cliccate sul pulsante di OK.
A questo punto avete il controllo
sull'oggetto grid.
Proprietà
"columns"
Cambiare i Fonts
Non ci
sono font predefiniti per l'oggetto grid ad eccezione del font di sistema
"Arial" 10. Questo significa che non potete impostare un font specifico per
l'intero oggetto grid, ma dovete farlo per ogni singola colonna... (questa è una
caratteristica mancante). Vedete nella libreria di funzioni "dUFLP" ( dBASE
Users' Function Library Project) al mio sito web.
Notate pure che alla
fine di questo documento parleremo di una "custom grid" che possiede la
caratteristica mancante...
Una volta che avete fatto i passi mostrati
precedentemente, potete impostare i font per le singole colonne effettuando le
istruzioni seguenti:
selezionate la colonna, ci sono tre
modi per farlo:
1) Con il "modulo Ispezione" visibile cliccate
sulla colonna stessa, ciò potrà richiedere due clic. Il primo per selezionare la
griglia, il secondo selezionerà la colonna. Non cliccate sulla testata della
colonna o sull'indicatore della colonna, ciò non farà altro che dare il "fuoco"
all'oggetto grid.
2) Sempre con il "modulo Ispezione"
selezionate l'oggetto grid, cercate la proprietà "columns", cliccate sul
pulsante dovreste vedere nel "modulo
Ispezione" la categoria "Elementi di Array" che visualizza le colonne
dell'oggetto grid. A questo punto potete selezionare la colonna e cliccando sul
pulsante
potete ispezionarla.
Ispezione della proprietà
Columns
3) Tramite il "Combobox" posto nella
parte alta del modulo potete scorrere l'elenco
per trovare la colonna adatta.
Ora che avete la colonna selezionata
nel modulo ispezione, sotto la categoria varie vedrete le proprietà:
"editorControl" e "headingControl".
Proprietà "editorControl" e
"headingControl"
Queste proprietà ci consentiranno di
cambiare i font. Cliccate su editorControl e successivamente sul pulsante
.
Come potete vedere adesso avete accesso alle
proprietà per modificare i font. Impostate il font che preferite. Potete fare lo
stesso per la proprietà headingControl
accesso alle proprietà
"Font" della colonna selezionata
Cambiare i colori
I colori possono essere impostati in modo
simile a quanto fatto con i font, anche per i colori possiamo impostarli colonna
per colonna
Nota: se avete delle proprietà custom che impostano
colorNormal e colorHighlight per singoli campi nella tabella, queste
personalizzazioni (custom) saranno mantenute anche nell'oggetto grid.
Larghezza delle colonne
Una volta che avete impostato i font potreste vedere
che le larghezze delle colonne non sono dimensionate propriamente Per cambiare
la dimensione di una colonna dovete prima selezionarla e poi tramite il "modulo
Ispezione" nella categoria "Posizione" vedrete la proprietà width. Tramite essa
modificherete la larghezza della colonna.
Altezza della cella
L'altezza della cella può essere impostata su tutte le
celle di un oggetto grid, inclusa la proprietà headerControls di ciascuna
colonna.
Opzioni
allowAddRows: se impostato a vero indica che possono essere aggiunte direttamente righe tramite un oggetto Grid. allowAddRows determina se lo spostamento in giù dopo l'ultima riga di un oggetto grid inizia l'aggiunta di una nuova riga;
allowColumnMoving: l'impostazione predefinita è true, indica che l'utente può risistemare le colonne di una griglia facendo clic e trascinando le intestazioni delle colonne;
allowColumnSizing: l'impostazione predefinita è true, indica che l'utente può ridimensionare le colonne di una griglia facendo clic e trascinando le intestazioni delle colonne;
allowEditing: l'impostazione predefinita è true. Impostando allowEditing a false, la griglia diventa a sola lettura. (Potete avere singole colonne a sola lettura impostando la proprietà readonly nell'array rowset.fields);
allowRowSizing: l'impostazione predefinita è true, indica che l'utente può ridimensionare le righe di una griglia facendo clic e trascinando tra l’indicatore di riga nella colonna sinistra;
hasColumnHeadings: impostare questa proprietà a false per sopprimere l'intestazione delle colonne in una griglia. Se anche hasIndicator è false, la griglia conterrà solo i dati della cella;
hasColumnLines: impostare questa proprietà a false per sopprimere la visualizzazione delle linee verticali che separano le colonne in un griglia;
hasIndicator: l'indicatore di colonna è la colonna più a sinistra della griglia e contiene un'icona che indica la colonna corrente. L'icona cambia quando si effettua l'aggiunta di una riga. Impostare hasIndicator a false per sopprimere l'indicatore di colonna. Se anche hasColumnHeading è false, la griglia conterrà solo i dati delle celle;
hasRowLines: impostare questa proprietà a false per sopprimere la visualizzazione delle linee orizzontali che separano le righe della griglia;
integralHeight: impostare questa proprietà a false per visualizzare solo righe complete. Se la riga in fondo alla griglia risulta parzialmente tagliata, l'intera riga viene nascosta;
multiSelect:è simile a rowSelect, con l'eccezione che è possibile selezionare più righe contemporaneamente. Potete permettere l'utente di selezionare righe multiple;
rowSelect: impostare a true per creare l'effetto visivo di evidenziazione dell'intera riga nella griglia.
Visualizzare un campo calcolato
I campi calcolati sono utili per moltissime cose, ma
loro devono esistere nel rowset. Ci sono un paio di modi per fare questo. Uno di
questi è l'uso di modulo dati. Potete creare il vostro(i) campo(i) calcolato(i)
nel modulo dati e quando costruirete la scheda tale campo sarà a vostra
disposizione.
Si può anche utilizzare una query standard su una scheda.
Se create il campo calcolato su una query tramite impostazione scheda, affinché
il campo calcolato sia visualizzato avrete bisogno di chiudere e riaprire la
scheda (l'evento onOpen della query è il "luogo" dove il campo calcolato è
aggiunto, esso non sarà attivato fino a quando non uscite e riaprite la
scheda).
Tramite l'oggetto query relativo ad una tabella dove si ha
necessità di un campo calcolato fate i seguenti passi:
Cliccate sull'oggetto query per selezionarlo
Andate sulla pagina "Eventi" del modulo ispezione
Selezionate l'evento
onOpen, e premete il pulsante e
aggiungete il seguente codice:
f = new Field()
f.fieldName = "Mio Campo Calcolato"
// nota: ciò sarà attivato per ciascuna riga...
// "this" si riferisce al campo, "parent" è l'array fields....
// (sostituisci 'field1' con il nome del campo
// e naturalmente vorrete impostate calcoli per le vostre esigenze
f.beforeGetValue = {|| this.parent["field1"].value * 2 }
this.rowset.fields.add( f ) // qui "this" si riferisce alla query corrente:
Quando finito salvate la
scheda (o modulo dati ) ed uscite da impostazione scheda. Se stavate lavorando
direttamente sulla query (in impostazione scheda), riaprite la scheda in
impostazione scheda. Se stavate creando un modulo dati, sempre in Impostazione
scheda piuttosto che trascinare la tabella nella superficie di progettazione
della scheda, trascinate il modulo dati. Appena fate questo, l'evento onOpen
della query sarà attivato e il vostro campo calcolato apparirà nella tavolozza
campi, così come quando progettate la griglia.
MultiSelect
Questa è un argomento utile per alcuni sviluppatori,
ma è necessario capire bene come lavora questa
funzionalità.
MultiSelect permette all'utente di selezionare righe multiple
usando i tasti CTRL o SHIFT ed il clic del mouse.
Quando impostate
multiSelect a vero potete usare il metodo selected() dell'oggetto grid, il quale
restituisce un array di segnalibri (bookmarks) ai records selezionati. Tale
metodo si differenzia da quello dell'oggetto listbox, infatti se la proprietà
"multiple" dell'oggetto listbox è impostata a falso, selected() restituisce il
testo dell'elemento al momento selezionato nella casella di
riepilogo.
Mentre se multiSelect è falso il metodo selected() relativo
all'oggetto grid non sarà attivato. Il metodo selected() dell'oggetto grid
restituisce sempre un oggetto array, la stessa cosa si verifica quando
nell'oggetto listbox la proprietà multiple è impostata a vero.
Una
volta ottenuto l'array di segnalibri potete processare i record selezionati.
Siate consapevole del fatto che i segnalibri sono transitori. Cambiare l'ordine
di un indice, una condizione di filtro o setRange li distruggerà. Il codice per
processare i record selezionati potrebbe sembrare simile al seguente (qui si
presume l'uso di un pulsante...):
function PUSHBUTTON1_onClick
if form.grid1.selected().size > 0 // se il numero delle righe selezionate è > 0
aRows = form.grid1.selected() //array di segnalibri ( bookMarks) ai records selezionati
? "Numero di righe selezionate: " + aRows.size // numero righe selezionate
for i = 1 to aRows.size // Loop attraverso l'array
form.rowset.goto( aRows[i] ) // il metodo goto usa i segnalibri, che sono memorizzati nell'array
? i, form.rowset.fields["holname"].value // visualizza il campo che vi interessa
next // fine del loop
else
? "Nessuna riga selezionata"
endif
form.close() // chiudete la scheda
return
Programmando con un oggetto grid
La
migliore cosa per imparare di più sull'utilizzo dell'oggetto è creare una scheda
di prova ed esaminare il codice generato. Potete anche imparare esaminando il
codice creato da altre persone...
C'è un esempio nel file VESPER7.ZIP
Guardate il file ROSTER.WFM ed esaminate l'evento onClick per il radiobuttons su
pagina 2... Questo codice cambia i colori nell'oggetto grid e l'ordine
dell'indice del rowset.
Custom Grids
È possibile creare un controllo
grid personalizzato (custom) che potete memorizzare in un file di tipo .CC così
avrete la disponibilità di questo oggetto personalizzato alla stessa stregua
degli altri controlli custom.
Comunque fate attenzione in quanto sono
stati segnalati nel NG di Visual dBASE diversi problemi con griglie custom che
sono memorizzate in un oggetto container.
Copyright 1999, Kenneth J. Mayer. All rights reserved.