20 messaggi dal 25 aprile 2009
Salve a tutti
Ho un problema, devo popolare una gridview con una lista di oggetti. Ho una classe Business che mi ritorna una lista di oggetti per cui posso utilizzare due approcci:
- Bindare la gridview ad un ObjectDataSource al quale segnalo come metodo di select il metodo (selezionaTutti) della mia classe di Business.
- Popolare una List a runtime e bindarla direttamente al datasource della gridview e poi richiamare il Databind()

Il primo sistema lo utilizzo quando nella logica della pagina ho un solo metodo select (nel mio caso selezionaTutti() ) mentre il secondo metodo funziona benissimo quando devo filtrare i dati a runtime e quindi usare diversi metodi di select.

Il secondo approccio mi andrebbe benissimo se nn fosse per il fatto che la gridview poi non ha il supporto di paging (che in realtà gli viene fornita dal datasource) visto che non uso datasource ma gli passo direttamente la lista precedentemente popolata.

A questo punto avrei due possibilità:
- Imparare a farmi una paginazione personalizzata
- Crearmi un objectdatasource a runtime e assegnargli sempre a runtime TypeName, SelectedMethod e SessionParameter per poi darlo in pasto al gridview...ma non so se è fattibile come sistema e non saprei se poi perde tutto al primo postback generato dal cambio pagina.
- Utilizzare (e quindi studiarmi) il nuovo controlo .net 3.5 ListView popolato sempre a runtime direttamente conla mia lista di oggetti al quale gli attacco il datapager di .net 3.5.

Il terzo approccio mi sembra la scelta migliore (molto probabilmente l'hanno inventato per questo tipo di problemi) ma devo studiarmi il tutto ex novo.

Prima vorrei però sapere voi cosa mi consigliate.

Grazie per l'attenzione.
Michele.
3.168 messaggi dal 06 settembre 2002
Contributi | Blog
Ciao,

onestamente io ancora vado di repeater più cntrollo di paginazione custom fatto a mano.

1 faccio un metodo che torna gli oggetti già paginati ed il totale dei record
2 bindo la lista la controllo
3 passo al custom control il numero di record così costruisce i link per le pag successive.

Probabilmente con il listview ti troverai ancora meglio, ma di certo la gridview è da considerarsi un componente quasi morto quindi ti consiglio di usare altri metodi. l'objectdatasource verrà soppiantato da un nuovo controllo in ASP.NET 4.0 quindi uilizzarlo per fare qualcosa adesso non mi sembra la via migliore.

HTH
.

Nothing can be born from hartred

Stefano (SM15455) Mostarda
http://blogs.aspitalia.com/SM15455
Rome Italy
20 messaggi dal 25 aprile 2009
Grazie per la risposta,
credevo di essere io a non saper usare i vari datasource mentre sembra che il sistema effettivamente migliore sia popolare direttamente il gridview (o chi per lui) direttamente con la lista di oggetti.
Ora devo scegliere se imparare la via difficile ma migliore (repeater + custompaging) o affidarmi al listview+pager.
Inizierò a studiarmi quest'ultima soluzione poichè sto imparando ora a programmare in .net e preferisco concentrarmi su aspetti piu importanti per il momento, percio se il listview mi farà risparmiare tempo per ora, che ben venga.
Grazie ancora... vado a convertirmi sta gridview in una listview
mi intrometto, un secondo, se sfrutti a dovere l'ObjectDataSource ti sarà più facile passare a quanto a in serbo asp.net 4.0

puoi filtrare i dati, paginare e ordinarli a patto che la tua applicazione lo consenta.

ok concetrarsi su altro ma la paginazione è fondamentale e il DataPager altre a fornirti un UI non fa altro

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
20 messaggi dal 25 aprile 2009
Dunque mi sono dato una lettura al listview e con qualche inciampo sono riuscito a convertire la gridview in una listview (ho dovuto sistemare il codice di alcuni eventi: il prerender e oncommand, scoprire che dovevo riscrivere anche se vuote gli eventi onindexchanging/changed). Poi con mio grande sgomento ho scoperto che il datapager non compie alcun miracolo ma è un vuoto template di paginazione.
Tutto sommato non è stato tempo perso anzi, il listView sembra essere un controllo davvero potente e se ben utilizzato riesci a controllare anche il codice html generato.
Ok devo studiarmi (vederlo dai millemila esempi e capirlo) un sistema di paging visto che ho capito che sarà pane quotidiano in sviluppo asp.net.

@nostromo
Intendi che l'uso di objectDS mi faciliterà la vita con entityDS?
Ok io vorrei usare l'ObjectDS ma se io in corso d'opera (in runtime) voglio cambiare il metodo della select? Per esempio al posto di usare il metodo SelezionaTutti voglio usare SelezionaByUtente(int IDUtente).
E' una situazione comunissima in cui credo chiunque si sia trovato: hai una pagina con tutti i record clicchi su un pulsantino e filtri i record in base a un criterio. Voglio sapere se è fattibile e se non succede che al primo postback il metodo di select non torna quello originale.
Modificato da michele_p il 25 maggio 2009 15.58 -
io non modificherei la select, ma farei così:

doterei la mia classe di n overload del metodo Select.

al tuo ObjectDataSource associ quello con il maggior numero di parametri.

a questo punto, la logica è tutta nel medoto, se ti arriva un parametro tipo "username" vuoto, saprai che non dovrai filtrare per nore utente e così via

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
20 messaggi dal 25 aprile 2009
Ok ho cambiato tutto.
Ora ho usato ObjectDS con ListView e il datapager funge da solo (ma mi riprometto di studiarmi a breve il funzionamento di un sistema di paginazione custom visto che può servire).
Inoltre nella classe business ho fatto l'overload del select come suggerito da Nostromo anche se in verità è un "mezzo" overload ma questo è un altro discorso.
Effettivamente usare ObjectDS in questo modo offre un bel po di spazio di manovra in piu rispetto ad un uso simile ad un normale datasource al quale ci si abitua molto facilmente agli inizi come sqldatasource.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.