Strumenti Utente

Strumenti Sito


sviluppo:multiselectmultipage

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
sviluppo:multiselectmultipage [2013/02/20 16:39] a.muccisviluppo:multiselectmultipage [2024/10/15 09:45] (versione attuale) – modifica esterna 127.0.0.1
Linea 2: Linea 2:
 Una Griglia Multiselect serve per rendere selezionabili più di una Riga alla volta.\\ 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.\\ 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 **MultiSelectPost**+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**
  
-=== MultiSelectPost ===+=== MultiSelezionePost ===
 Con questa funzione potremo:  Con questa funzione potremo: 
-  * tenere memorizzate tutte le righe precedentemente selezionate.+  * memorizzare tutte le righe precedentemente selezionate.
   * visualizzare in ogni pagina le righe già selezionate   * visualizzare in ogni pagina le righe già selezionate
   * deselezionare le righe   * 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:+Per poter utilizzare questa funzione avremo bisogno prima di tutto di una **variabile in Session** che conterrà tutte le righe precedentemente selezionatee il nome della griglia:\\ 
 +\\
 Le dichiariamo: Le dichiariamo:
 <code> <code>
Linea 46: Linea 47:
     }     }
 </code> </code>
 +\\
 +Dopo di che chiamiamo la funzione nel** onClickTablePager** :
  
 +<code>
 +...
 +$sql = $this->CreaSql();
 +$this->SelezioneTab=$this->gfmLib->MultiSelezionePost($this->SelezioneTab,$this->gridLicenze,$sql);
 +...
 +</code>
 +\\
 +Notiamo:\\
 +  * L'assegnazione dell'**sql**;
 +  * 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 è stata inserita direttamente nella Lib.
  
- +**La funzione:**\\
-La funzione:\\+
  
 <code> <code>
 public function MultiSelezionePost($SelezioneTab,$Griglia,$sql){ public function MultiSelezionePost($SelezioneTab,$Griglia,$sql){
-      // Invia in POST le row selezionate nella pagina precedente+$Riga='jqg_'.$Griglia.'_'; 
 +// PRIMA PARTE
       foreach ($SelezioneTab as $key => $Result_rec) {       foreach ($SelezioneTab as $key => $Result_rec) {
-        if($_POST['jqg_'.$Griglia.'_'.$key] == '0'){ +        if($_POST[$Riga.$key] == '0'){ 
-             $_POST['jqg_'.$Griglia.'_'.$key] = '0';+             $_POST[$Riga.$key] = '0';
              $SelezioneTab[$key ] = '0';              $SelezioneTab[$key ] = '0';
             }else{             }else{
-               if(!Out::valore('jqg_'.$Griglia.'_'.$key,'1')){ +               if(!Out::valore($Riga.$key,'1')){ 
-                  $_POST['jqg_'.$Griglia.'_'.$key]='1';+                  $_POST[$Riga.$key]='1';
                     }                     }
                   }                   }
                 }                 }
-        //Si riscorre tutte le righe e quelle che trova controlla.         +// SECONDA PARTE     
-        $Griglia_tab=ItaDB::DBSQLSelect($this->getDATABASE(),$sql, true);+       $Griglia_tab=ItaDB::DBSQLSelect($this->getGAFIEREDB(),$sql, true);//<- Cambiare il DB
         foreach ($Griglia_tab as  $Griglia_rec) {         foreach ($Griglia_tab as  $Griglia_rec) {
-            if( $_POST['jqg_'.$Griglia.'_'.$Griglia_rec['ROWID']] == '1'){ +            if( $_POST[$Riga.$Griglia_rec['ROWID']] == '1'){ 
-                $NuovoConto[$Griglia_rec['ROWID']]='1'; +                $NuovaSelezione[$Griglia_rec['ROWID']]='1'; 
-                Out::valore('jqg_'.$Griglia.'_'.$Griglia_rec['ROWID'],'1');+                Out::valore($Riga.$Griglia_rec['ROWID'],'1');
              }else {              }else {
                 if($SelezioneTab[$Griglia_rec['ROWID']] == '1'){                 if($SelezioneTab[$Griglia_rec['ROWID']] == '1'){
-                          $NuovoConto[$Griglia_rec['ROWID']]='0';+                          $NuovaSelezione[$Griglia_rec['ROWID']]='0';
                         }                         }
                     }                     }
                  }                  }
-       $SelezioneTab = $NuovoConto; + 
-       return $SelezioneTab;+       return $NuovaSelezione;
     }     }
 </code>  </code> 
-Possiamo notare+**La prima parte** della funzione invia in **POST** anche le **row** selezionate nella pagina precedente (ovviamente se è la prima pagina non verrà eseguita) 
-**$SelezioneTab,$Griglia,$sql**\\ + 
- **$SelezioneTab:** Rappresenta l'array che contiene tutte le righe selezionate. +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 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) 
 +    * Se non ci sono, 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
 + 
 +Nel nostro programma avremo quindi la variabile in session $this->SelezioneTab costantemente aggiornato ad ogni evento legato alla tabella. 
 +\\ 
 +\\ 
 +**Nota**\\ 
 +\\ 
 +Con questa funzione è possibile selezionare oltre 2000 righe, ma nel caso in cui ce ne siano di più è opportuno inserire un bottone che permetta di stamparle direttamente tutte e inserire dei filtri nella ricerca( in modo da //smaltire// le righe in più).\\ 
 +\\ 
 +Per l'output delle righe selezionate, possiamo utilizzare un semplice ciclo:\\ 
 +<code> 
 + foreach ($SelezioneTab as $key => $Result_rec) { 
 +                  $SelezioneGrid[]=$key; 
 +                 
 +                
 +        $sql=" SELECT * 
 +               FROM DITTELIC  
 +               WHERE 1"; 
 +        $sql.=" AND("; 
 +        for ($index = 0; $index < count($SelezioneGrid); $index++) { 
 +             $sql.=" ROWID = $SelezioneGrid[$index] OR"; 
 +         } 
 +        $sql=substr($sql,0,-3); 
 +        $sql.=" )"; 
 +</code> 
 +**$SelezioneTab** è l'Array che contiene le righe selezionate.\\ 
 +\\ 
 +Ovviamente, se vogliamo passare una **$SelezioneTab** aggiornata, prima del ciclo, dovremo richiamare nuovamente la funzione **MultiSelectPost**, in modo che se nell'ultima pagina visualizzata sono state selezionate una o più righe, vengano aggiunte anch'esse all'array:\\ 
 +<code> 
 +... 
 +$sql = $this->CreaSql(); 
 +$this->SelezioneTab=$this->gfmLib->MultiSelezionePost($this->SelezioneTab,$this->gridLicenze,$sql); 
 +... 
 +</code> 
 +\\ 
 +Con il ciclo, rielaboriamo l'array in modo da ottenere le varie $key,che sono l'indice(ROWID), in sequenza.\\ 
 +Dopo di che, in questo esempio, all'sql aggiungiamo la condizione //ROWID = N OR// per ogni elemento dell'array, in modo da selezionare tutti gli indici(ROWID) che corrispondono a quelli selezionati.\\ 
 +Avremo un risultato del genere:\\ 
 +\\ 
 +SELECT * FROM DITTELIC WHERE 1 AND( ROWID = 2 OR ROWID = 3 OR ROWID = 35 ) 
 +\\ 
 +{{counter}} visualizzazioni. 
sviluppo/multiselectmultipage.1361378388.txt.gz · Ultima modifica: 2018/03/19 10:45 (modifica esterna)