Lavorare con il controllo Grid 
in Visual dBASE 7.01 
Ultima Modifica: 21 Marzo 1999 
Ken Mayer, Senior SQA Engineer 
dBASE, Inc. 

Traduzione in italiano di Antonio Campagna - Giugno 2001


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 

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: 

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.