.. _tablehandler/ViewResource/base_hooks/th_struct_method: 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 :ref:`Metodo th_applymethod` ). .. hint :: 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 .. image:: /_static/images/ViewResource/base_hooks/zoom-e-zoom_mode.gif :width: 100% :align: center 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: .. image:: /_static/images/ViewResource/base_hooks/columnset.png :width: 535px :align: center :height: 158px :: 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') .. raw:: html
**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) | +------------------------+------+--------------------------------------------------+ .. sectionauthor:: Valter Vettorello