Risolvere problemi di paging con ASP.NET in Dreamweaver MX



Invalid CurrentPageIndex value. It must be >= 0 and < the PageCount

Vi è capitato di ricevere questo messaggio d’errore durante la navigazione nelle vostre pagine ASP.NET connesse ad un database?

Uno dei problemi più seccanti quando si usa Dreamweaver riguarda il paging dei datagrid, le tabelle dinamiche di ASP.NET. Con Dreamweaver è abbastanza semplice effettuare una connessione ad un database, impostare delle query e visualizzare i dati in tabelle dinamiche, però se vogliamo che i record risultanti dalla query siano distribuiti su più pagine, allora dobbiamo prevedere delle condizioni particolari, e lì cominciano i problemi per chi non sa programmare bene, perché non vi è supporto in Dreamweaver per gestire questa evenienza in modalità WYSWYG (“what you see is what you get”).

A cosa è dovuto l’errore di “invalid current page index”

Immaginiamo di avere un database contenente una tabella con 1000 record. In una pagina web realizziamo un form per effettuare delle query verso il nostro database che “pescheranno” un certo sottoinsieme di record, formando un dataset. Facciamo in modo che i risultati del dataset vengano visualizzati in un apposito datagrid, ma poiché non vogliamo rischiare di vedere centinaia di risultati in una sola pagina attiviamo in Dreamweaver il paging del datagrid, ponendo, ad esempio, un limite di venti record per pagina. Inoltre, inseriamo i numeri di pagina per una più facile navigazione (cfr. immagine di esempio qui sotto). Ora testiamo la nostra pagina web, effettuando delle ricerche nel database: con la nostra prima query otteniamo 10 pagine di risultati. Scorriamo le pagine fino all’ultima.. tutto sembra funzionare. A questo punto facciamo un’altra query ed ecco che compare l’errore di “invalid current page index”. Cosa è accaduto? Semplicemente, la nostra seconda query ha restituito un indice di 8 pagine (ad esempio) ma il nostro indice di pagina è rimasto a 10: l’applicazione cerca quella pagina e non la trova (il PageCount è minore del CurrentPageIndex).

regali in tabella con paging

Fig.1 : datagrid con paging (l’esempio è tratto dal sito Regalo Idee )


Come rimediare all’errore

Vi sono molti modi per gestire questo errore, ma in questa sede ci interessa farlo utilizzando gli strumenti di Dreamweaver, così tratteremo il problema di paging in modo appropriato ed elegante.

Rifacendoci all’esempio precedente, ciò che ci serve è che ogni volta che facciamo una NUOVA query, ci sia un CurrentPageIndex =1. Per questo scopo, possiamo operare nel modo seguente:

1. Nel tag MM:PageBind modifichiamo il valore di PostBackBind mettendo “false” (per default è “true”)

protected void cambiaIndex(Object Src, EventArgs eArgs) { DataGridPageChangedEventArgs e = new DataGridPageChangedEventArgs(, 0); .OnDataGridPageIndexChanged(, e); }

2. Aggiungiamo uno script per correggere il CurrentPageIndex inserendo il seguente codice al di sopra del tag :

codice in C :

<script runat="server">
protected void cambiaIndex(Object Src, EventArgs eArgs)
{
DataGridPageChangedEventArgs e = new DataGridPageChangedEventArgs(<nome datagrid>, 0);
<nome dataset>.OnDataGridPageIndexChanged(<nome datagrid>, e);
}
</script>

Codice in VB:

Sub cambiaIndex(Sender As Object, eArgs As EventArgs)
Dim e As DataGridPageChangedEventArgs = New DataGridPageChangedEventArgs(<nome datagrid>,0)
<nome dataset>.OnDataGridPageIndexChanged(<nome datagrid>,e)
End Sub

3. Ancoriamo lo script all’elemento che usiamo per inviare il form: ad esempio, se si tratta di una TextBox aggiungeremo OnTextChanged=”cambiaIndex”; se si tratta di un pulsante aggiungeremo OnClick=”cambiaIndex”

N.B. il tutto funziona a meno che non abbiate impostato criteri aggiuntivi per la visualizzazione del datagrid, come gli “Show if..” di Dreamweaver! Se li usate, per evitare errori indotti dagli MM:If potreste aggiungere istruzioni sulla visibilità del datagrid direttamente nello script utilizzato per il CurrentPageIndex, richiamando il VitualItemCount.

Esempio: voglio che la tabella non venga visualizzata quando non ci sono record (in VB):

If SceltaBase.VirtualItemCount=0 Then
<nome datagrid>.Visible= "False"
End If

In ultimo, se volete vedere più da vicino cosa fa Dreamweaver con la funzione OnDataGridPageIndexChanged potete esaminare il codice sorgente di DreamweaverCtrls.dll, contenuto nel file DreamweaverCtrls.cs (dovrebbe essere in una sottocartella “Source” del programma).

Buona fortuna e buon paging.

Annunci sponsorizzati:
Condividi su Facebook Condividi su Twitter!
Pinterest