Ordinamento su oggetti

martedì 06 luglio 2010 - 13.45

pishta Profilo | Newbie

salve, ho un gridview che binda i dati da

GridView1.DataSource = coll;

coll è una lista di oggetti "attività"

C'è un modo per fare il sorting di questo oggetto e rifare il bind secondo questo nuovo ordine? (in pratica mi serve per il metodo sort del GridView)

grazie.

Gluck74 Profilo | Guru

puoi fare il sort sulla griglia utilizzando il metodo Sort(expr, dir).
Qui trovi le specifiche e un esempio:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.sort.aspx

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

pishta Profilo | Newbie

grazie ;-D. ma poi una volta applicato il Sort(expression, direction); gridview come avviene il refresh dello stesso per visualizzare il nuovo ordine dei dati? devo rifare un databind?

Gluck74 Profilo | Guru

Leggi questi pochi ma buoni trucchetti:
http://weblogs.asp.net/scottgu/archive/2006/02/11/437995.aspx

Ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

pishta Profilo | Newbie

il problema è che mi sembra di aver settato tutto bene


il metodo che richiamo dal GridView1 è questo

protected void gridSortHandler(object sender, GridViewSortEventArgs e)
{
GridView1.Sort("Kcal", SortDirection.Descending);
}

e comunque dal gridview1 ho settato le proprietà AllowSorting="true" OnSorting="gridSortHandler" e per ogni DataField ho settato la proprietà SortExpression.

In questo scenario si genera un loop in gridSortHandler

Gluck74 Profilo | Guru

certo, perché nell'evento sorting, tu ripeti il Sort, e l'evento viene richiamato, dove dentro tu fail il sort, che fa scattare l'evento che chiama il sort..............
insomma, hai capito no???

Il metodo sort lo devi utilizzara in altro luogo, metre dentro l'evento al limite fai a settare SortExpression, per configurare su quale colonna devi fare il sort.
Ma se tu hai abilitato il columnSort già sulla griglia, avviene tutto in automatico senza toccare nulla nel codice.



____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

pishta Profilo | Newbie

effettivamente la cosa strana è che io ora ho tolto qualsiasi gestione dell'evento Sort ovvero ho cancellato il metodo gridSortHandler e anche la relativa proprietà OnSorting che lo richiamava nel controllo. Quindi ora ho un gridview con AllowSorting="true e le varie sortExpression settate....eppure nulla accade.... anzi, al click sull'header table per sortare ottengo un errore server:

L'evento Sorting generato dal GridView 'GridView1' non gestito (credo giustamente)

Gluck74 Profilo | Guru

allora, se ad ogni colonna gli hai definito il sortExprassion (guarda nella pagina aspx la definizione di ogni colonna), non hai bisogno di eventi
Quindi anche nella griglia devi togliere la proprietà "onsorting"

se invece non hai specificato le sortExpression per ogni colonna, lo fai nell'evento da codice.

Se ti da errore probabilmente hai ancora qualche proprietà che richiama eventi, e gli eventi lato codice non ci sono

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

pishta Profilo | Newbie

ti posto direttamnente la GridView magari puoi trovare il cavillo....

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

Gluck74 Profilo | Guru

sembra OK.
l'unica cosa è che avendo abilitato il sorting, ad avendo messo solo un'espressione di ordinamento, non vorrei che le colonne senza espressione diano fastidio.

Per il resto mi sembra tutto corretto

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

pishta Profilo | Newbie

Ok ho tutti i campi con la sort expression però purtroppo ancora non va...nel senso che se non metto un metodo vuoto nel default.aspx.cs

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { }

ottengo un errore server per non aver gestisto l'evento

se lo metto chiaramente è vuoto e non fa nulla....

Gluck74 Profilo | Guru

per forza di cose è rimasto da qualche parte un riferimento o una chiamata a questa function. NON si scappa.
fai un cerca nell'intero progetto di "GridView1_Sorting"..... DEVE uscire qualcosa per forza.....

ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5