Problema CurrentPageIndex

martedì 20 febbraio 2007 - 21.22

motogpdesmo16 Profilo | Senior Member

Salve a tutti...stavolta ho questo problema e spero che mi possiate aiutare così come avete sempre fatto: ho la necessità di paginare il mio datagrid a scaglioni di 10 elementi per pagina.
La paginazione avviene correttamente ma il problema si ha quando clicco sul pulsante "modifica" (quindi EditCommand): le colonne mi si trasformano in textbox e posso effettuare gli update che desidero. Nessun problema se mi trovo nella prima pagina...i casini nascono quando sono nella seconda pagina (e presumo anche nella eventuale 3a, 4a, 5a ecc....). Non appena clicco sul tasto "Aggiorna" (quindi UpdateCommand) ottengo l'errore "Valore di CurrentPageIndex non valido. Deve essere maggiore o uguale a zero e minore di PageCount"

Detto così ovviamente non potete analizzare granchè...questo è il codice che ho inserito (vi inserisco tutti gli eventi della griglia):

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e questa è la procedura di riempimento della griglia di cui viene fatta menzione nel codice che ho appena postato
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Spero di essere stato abbastanza chiaro nell'esposizione del problema
Grazie come sempre dell'infinito e prezioso aiuto.

squilibrium Profilo | Junior Member

Prova ad utilizzare questa funzione prima di richiamare il databind della griglia
all'interno della funzione riempigriglia

public static void UpdateCurrentPage(DataGrid objDataGrid)
{
try
{
int iPageSize= objDataGrid.PageSize;
int iNumRecord = 0;
int iPagine = 0;
int iResto ;

switch(objDataGrid.DataSource.GetType().Name)
{
case "DataSet":
iNumRecord = ((DataSet)(objDataGrid.DataSource)).Tables[0].DefaultView.Count;
break;
case "DataView":
iNumRecord = ((DataView)(objDataGrid.DataSource)).Count;
break;
case "DataTable":
iNumRecord = ((DataTable)(objDataGrid.DataSource)).Rows.Count;
break;
}


iResto = iNumRecord % iPageSize;
iPagine = (iNumRecord / iPageSize);
if (iResto > 0) iPagine += 1;

if (iNumRecord > iPageSize)
{
if (objDataGrid.CurrentPageIndex >= iPagine) objDataGrid.CurrentPageIndex = iPagine - 1;
}
else
{
objDataGrid.CurrentPageIndex = 0;
}
}
catch(Exception ex)
{
throw ex;
}

}

Ciao

motogpdesmo16 Profilo | Senior Member

Prima di richiamare il databind della griglia ho "tradotto" il tuo codice in linguaggio vb.
Dim PageSize = griglia.PageSize Dim NumRecord = 0 Dim Pagine = 0 Dim Resto = 0 Select Case griglia.DataSource.GetType().Name Case "Dataset" Dim ds As DataSet = New DataSet ds = griglia.DataSource NumRecord = ds.Tables(0).DefaultView.Count Case "DataView" Dim dv As DataView = New DataView dv = griglia.DataSource() NumRecord = dv.Count Case "DataTable" Dim dt As DataTable = New DataTable dt = griglia.DataSource() NumRecord = dt.Rows.Count End Select Resto = NumRecord Mod PageSize Pagine = NumRecord \ PageSize If (Resto > 0) Then Pagine += 1 End If If (NumRecord > PageSize) Then If (griglia.CurrentPageIndex >= Pagine) Then griglia.CurrentPageIndex = Pagine - 1 Else griglia.CurrentPageIndex = 0 End If End If
Non dovrei aver commesso errori....

Il problema è che non appena clicco sulla seconda pagina, non me la carica e rimane sempre sulla prima....
N.b.: quando calcolo Resto e Pagine tu usi gli operatori "%" e "/" che sono pari ai miei "MOD" (calcola il resto della divisione) e "\" calcola la parte intera della divisione.

Grazie comunque per l'interessamento.

micto27 Profilo | Senior Member

>Salve a tutti...stavolta ho questo problema e spero che mi possiate
>aiutare così come avete sempre fatto: ho la necessità di paginare
>il mio datagrid a scaglioni di 10 elementi per pagina.
>La paginazione avviene correttamente ma il problema si ha quando
>clicco sul pulsante "modifica" (quindi EditCommand): le colonne
>mi si trasformano in textbox e posso effettuare gli update che
>desidero. Nessun problema se mi trovo nella prima pagina...i
>casini nascono quando sono nella seconda pagina (e presumo anche
>nella eventuale 3a, 4a, 5a ecc....). Non appena clicco sul tasto
>"Aggiorna" (quindi UpdateCommand) ottengo l'errore "Valore di
>CurrentPageIndex non valido. Deve essere maggiore o uguale a
>zero e minore di PageCount"
>

Ciao,
credo che il problema sia il seguente:

se sei posizionato sulla seconda pagina del datagrid e poni una riga in modalità "edit"
al momento dell'evento "UpdateCommand" (a seguitoo del postback attivato dal click
sul tasto "Aggiorna") se esegui il codice che hai segnalato

Griglia.EditItemIndex = -1
Griglia.DataBind()
---operazioni di aggiornamento sul database
riempigriglia(Griglia, SqlCategorie, "Categorie")

succede che
la proprietà CurrentPageIndex del datagrid vale 1
però se fai Griglia.DataBind() senza prima associare
alla prorietà DataSource l'oggetto DataView con i dati,
tale proprietà DataSource varrà Nothing e di conseguenza
si genererà l'errore che hai segnalato in quanto senza
dati da acquisire il DataBind genererà 0 "pagine" mentre invece
CurrentPageIndex vale 1.

Michele

motogpdesmo16 Profilo | Senior Member

ciao micto.
Effettivamente il problema è esattamente come l'hai descritto tu: ho riguardato meglio il codice e ho provveduto a correggerlo commentando l'istruzione [i]griglia.databind[/i] poichè lancio già la mia [i]riempigriglia[/i] che provvede a refreshare la griglia e mostrare correttamente i dati.

Ho effettuato diverse prove in fase di cambio pagina (sono sulla pagina 1, vado alla pagina 2-modifico record-salvo, torno alla pagina1) e funziona tutto correttamente...

Nel caso in cui riesca ad effettuare un test particolare che mi mette in crisi la griglia provvederò a segnalarlo e cercheremo di trovare, con la pazienza e la collaborazione di tutti, di risolverlo

Grazie comunque per l'interesse!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5