DataBind e Postback
-
06-07-2019 - |
Domanda
Questo è un modo generale in cui DataBind fa domande ...
Ho una pagina semplice con un GridView che è associato (nel codice aspx) a un ObjectDataSource.
Posso guardare nella funzione Select () chiamata da ObjectDataSource per vedere che viene chiamata sul caricamento iniziale e su ogni post. Ho un po 'di logica che si verifica sui back-back che influirà sui dati di GridView e desidero chiamare GridView.DataBind () più avanti nel post-back, dopo aver apportato alcune modifiche.
Esiste un modo per impedire il rebinding automatico che si verifica su ogni post? Questo significa che non posso usare un ObjectDataSource per questo controllo?
Soluzione
Hai ragione nel dire che il controllo granulare che stai cercando non è possibile e richiede il codice dietro. Gli oggetti dell'origine dati di ASP.NET non sono altro che un problema in a **. Scoprirai che mentre li usi otterrai situazioni come questa che si ripresentano ancora e ancora.
Alcuni dei problemi che troverai sono:
- Non fortemente tipizzato
- Inflessibile (come hai notato)
- Muddy up il codice di presentazione
Ho iniziato a fare tutto l'accesso ai dati nel codice dietro e non ho guardato indietro.
Altri suggerimenti
Ho combattuto anche con questa associazione automatica e ho pensato di pubblicare la mia soluzione qui:
- rimuovi " DataSourceID " dalla pagina ASPX, quando non è impostato, non è presente l'associazione automatica
- imposta DataSourceID in CodeBehind solo quando è necessario DataBinding: myGridView.DataSourceID = " MyDataSource " ;;
- non chiama myGridView.DataBind () esplicitamente, il databinding avviene automaticamente su PreRender
Mi ci è voluto un po 'per capirlo, ma ora tutto funziona bene.
Contesto
Uso ObjectDatasource perché gestisce automaticamente tutti i paging e ordinamento di Gridview. Sto usando un livello dati con Linq2SQL e utilizzo i suoi metodi Skip () e Take () per caricare solo la quantità di dati necessari per popolare una pagina di GridView.
Uso di SelectMethod e SelectCountMethod di ObjectDataSource
Sì. Se vuoi quel tipo di controllo su quando si verifica il database, devi farlo nel codice dietro.