Metodo th_struct

Impostazione delle colonne

th_struct è il metodo principale che definisce non solo quali colonne saranno contenute nella lista, ma in fase di definizione di ciascuna colonna è possibile attribuire delle proprietà che ne caratterizzano la visualizzazione ed il comportamento.

Vediamo ora un semplice esempio di definizione di th_struct:

def th_struct(self,struct):
  r = struct.view().rows()
  r.fieldcell('ragione_sociale')
  r.fieldcell('indirizzo')
  r.fieldcell('comune_id')
  r.fieldcell('provincia')
  r.fieldcell('tot_fatturato',format='#,###.00')

Riceve una struct che dovrà essere popolata con le colonne che saranno visualizzate nella view.

È importante sottolineare che la struttura della view è sostanzialmente la stessa, sia che si tratti di una view di una tabella fisica, sia che si tratti di una view ad esempio di una BagGrid. Gli elementi cell e fieldcell vengono utilizzate per definire le colonne: fieldcell si usa per colonne che sono definite nel model di una table del database, mentre cell viene invece usato se la colonna non esiste nel database ma solo nel datastore o se viene definita estemporaneamente come formula.

In fieldcell le proprietà della colonna vengono prese direttamente dal model e non sarà necessario specificarle, tuttavia si potrà intervenire con dei parametri per modificarne l’aspetto visivo, come larghezza della colonna, allineamento ecc. Ovviamente il suo valore del parametro field dovrà coincidere con il nome della colonna usato nel model. Si rimanda alla documentazione dedicata nella Widgetpedia per i dettagli sugli attributi del widget.

Aggiungendo una colonna che sia foreign_key di un’altra tabella, sarà automaticamente visualizzata la descrizione usando l’attributo caption_field della colonna in relazione. È inoltre possibile aggiungere nella griglia colonne prelevate da altre tabelle in relazione con la consueta sintassi prevista:

r.fieldcell('@fatture.protocollo')

In caso di utilizzo di cell, invece, il valore di field dovrà coincidere con la key usata nel datastore della stampa o della BagGrid in modo tale che sia sempre rispettata la corrispondenza tra struct e datastore. Si rimanda alla documentazione dedicata nella Widgetpedia per i dettagli sugli attributi del widget.

In una view relativa ad una tabella fisica è comunque possibile definire delle colonne di tipo cell, quindi non legate alla struttura fisica della tabella, ma definite come colonne calcolate (vedi Metodo th_applymethod ).

Suggerimento

Internamente, Genropy utilizza tutte colonne di tipo cell, in tal senso l’uso di fieldcell costituisce una sorta di scorciatoia in quanto ci evita di dover definire alcune delle altre proprietà (come dtype, name_short e name_long) in quanto vengono ereditate direttamente dal model. Qualora in fase di definizione di un fieldcell fossero attribuite delle proprietà specifiche, come ad esempio name_long, questa prevarrebbe rispetto alla stessa proprietà definita nel model.

L’uso di zoom

L’attributo zoom è particolarmente comodo per poter selezionare un nuovo record (in base al campo su cui è impostato) sulla finestra di gestione della tabella stessa

../../_images/zoom-e-zoom_mode.gif

In particolare è possibile definire in che modo verrà mostrata la Form del record: con zoom_mode='page', per esempio, questa verrà mostrata in una nuova pagina.

L’uso dei columnset

Il columnset ha uno scopo di esclusiva organizzazione visiva dei dati e ne consente una maggiore leggibilità, vediamone il risultato e successivamente il suo utilizzo:

../../_images/columnset.png
def th_struct(self,struct):
  r = struct.view().rows()
  r.fieldcell('ragione_sociale', width='20em')

  indirizzo = r.columnset('colset_indirizzo', name='indirizzo')
  indirizzo.fieldcell('indirizzo', width='10em')
  indirizzo.fieldcell('provincia', width='3em', align='center')

  riferimenti = r.columnset('colset_riferimenti', name='riferimenti')
  riferimenti.fieldcell('telefono', width='7em')
  riferimenti.fieldcell('cellulare', width='5em')

come si può vedere, basterà definire un columnset con un nome e associarlo ad una row:

indirizzo = r.columnset(...)

e successivamente aggiungere le row (indirizzo, provincia) tramite il metodo fieldcell, non alla row ma al nuovo oggetto columnset.

indirizzo.fieldcell('indirizzo', width='10em')
indirizzo.fieldcell('provincia', width='3em', align='center')

Parametri:

Nome parametro

Tipo

Descrizione

isMain

B

Se impostato a True permette di definire una struct come principale (nel caso ve ne siano più di una)

Autore della sezione: Valter Vettorello