Questa è una vecchia versione del documento!
Multiselezione con più pagine
Una Griglia Multiselect serve per rendere selezionabili più di una Riga alla volta.
E' possibile però che capiti di avere una Griglia con molte righe e che ciò renda i tempi di creazione/aggiornamento della tabella molto lunghi.
Il problema può essere risolto utilizzando una Multiselect con più Pagine, ma dato che non è ancra implementato un sistema di cattura delle righe precedentemete selezionate dovremo utilizzare la funzione MultiSelezionePost
MultiSelezionePost
Con questa funzione potremo:
- tenere memorizzate tutte le righe precedentemente selezionate.
- visualizzare in ogni pagina le righe già selezionate
- deselezionare le righe
Per poter utilizzare questa funzione avremo bisogno prima di tutto di una variabile in Session che conterrà tutte le righe precedentemente selezionate e il nome della griglia:
Le dichiariamo:
.. public $gridLicenze = "gfmConLicenze_gridLicenze"; public $SelezioneTab = array(); ..
Nel construct:
function __construct() { parent::__construct(); try { $this->GAFIERE_DB = ItaDB::DBOpen('GAFIERE'); $this->SelezioneTab = App::$utente->getKey($this->nameForm . '_SelezioneTab'); ...
Nel destruct:
function __destruct() { parent::__destruct(); if ($this->close != true) { App::$utente->setKey($this->nameForm . '_SelezioneTab', $this->SelezioneTab); ...
Nel close:
public function close() { App::$utente->removeKey($this->nameForm . '_SelezioneTab'); Out::closeDialog($this->nameForm); }
Dopo di che chiamiamo la funzione nel onClickTablePager :
... $sql = $this->CreaSql(); $this->SelezioneTab=$this->gfmLib->MultiSelezionePost($this->SelezioneTab,$this->gridLicenze,$sql); ...
Notiamo:
- L'assegnazione di $this→SelezioneTab
- Il richiamo della funzione MultiSelezionePost con l'utilizzo di 3 variabili:
- $this→SelezioneTab: Utiliziamo la variabile in session in quanto contiene i campi già selezionati (ovviamente se si tratta del primo richiamo sarà vuota)
- $this→gridLicenze: rappresenta il nome della griglia, in questo caso: gfmConLicenze_gridLicenze
- $sql: la stessa sql che utilizziamo per creare la griglia, in modo che la funzione che stiamo chiamando si scorra gli stessi campi e possa controllare i ROWID selezionati.
In questo caso noi utilizziamo un SELECT * FROM DITTELIC
La funzione:
public function MultiSelezionePost($SelezioneTab,$Griglia,$sql){ // PRIMA PARTE foreach ($SelezioneTab as $key => $Result_rec) { if($_POST['jqg_'.$Griglia.'_'.$key] == '0'){ $_POST['jqg_'.$Griglia.'_'.$key] = '0'; $SelezioneTab[$key ] = '0'; }else{ if(!Out::valore('jqg_'.$Griglia.'_'.$key,'1')){ $_POST['jqg_'.$Griglia.'_'.$key]='1'; } } } // SECONDA PARTE $Griglia_tab=ItaDB::DBSQLSelect($this->getDATABASE(),$sql, true); foreach ($Griglia_tab as $Griglia_rec) { if( $_POST['jqg_'.$Griglia.'_'.$Griglia_rec['ROWID']] == '1'){ $NuovaSelezione[$Griglia_rec['ROWID']]='1'; Out::valore('jqg_'.$Griglia.'_'.$Griglia_rec['ROWID'],'1'); }else { if($SelezioneTab[$Griglia_rec['ROWID']] == '1'){ $NuovaSelezione[$Griglia_rec['ROWID']]='0'; } } } return $NuovaSelezione; }
La prima parte della funzione invia in POST le row selezionate nella pagina precedente (ovviamente se è la prima pagina non verrà eseguita)
Notiamo:
- le 3 variabili precedentemente descritte: $SelezioneTab,$Griglia,$sql
- $SelezioneTab: $this→SelezioneTab
- $Griglia: gfmConLicenze_gridLicenze
- $sql: SELECT * FROM DITTELIC
- jqg_'.$Griglia.'_'.N: (jqg_gfmConLicenze_gridLicenze_N) rappresenta nel post le righe presenti nella pagina della tabella. Esso può assumere un valore tra 1 e 0 (Check o non Check).
N rappresenta il numero della riga (Rowid)
Nella seconda parte della funzione:
- viene creato l'Array $Griglia_tab che conterrà tutte le righe di DITTELIC, dopo di che con un ciclo lo scorriamo tutto e verifichiamo se tra i post della pagina sono presenti una o più righe che hanno valore 1 (Checked).
- Se ci sono vengono aggiunte all'array provvisorio $NuovaSelezione e vengono valorizzate(Checked nella griglia)
- Altrimenti controlla se tra le righe nella pagina sono presenti righe precedentemente selezionate (Quindi presenti in $SelezioneTab) e le assegna a 0. In questo modo non risulteranno più selezionate.
- In fine avremo il return di $NuovaSelezione che rappresenta l'array aggirnato con tutte le righe selezionate in precedenza.