2009-05-06 12 views
6

Questo è un generale come fa DataBind domande di lavoro ...DataBind e postback

Ho una pagina semplice con un GridView che è legato (nel codice aspx) per un ObjectDataSource.

Posso guardare nella funzione Select() chiamata da ObjectDataSource per vedere che viene richiamato sul carico iniziale e su ogni post di ritorno. Ho una logica che accade sui postback che influenzeranno i dati di GridView, e voglio chiamare GridView.DataBind() più avanti nel post dopo aver apportato alcune modifiche.

C'è un modo per impedire il riavvolgimento automatico che si verifica su ciascun post? Questo significa che non posso utilizzare ObjectDataSource per questo controllo?

risposta

12

Hai ragione nel fatto che il controllo a grana fine che stai cercando non è possibile e richiede il codice. Gli oggetti di origine dati di ASP.NET non sono altro che un dolore nella a **. Scoprirai che man mano che li usi ti capitano situazioni come questa che saltano ancora e ancora.

Alcuni dei problemi che troverete sono:

  • Non fortemente tipizzato
  • Inflessibile (come avete notato)
  • Muddy il codice di presentazione

I' ho preso a fare tutti i dati di accesso nel codice dietro e non ho guardato indietro.

2

Sì. Se vuoi quel tipo di controllo su quando si verifica il databinding, devi farlo nel codice sottostante.

8

Ho combattuto con questo legame automatico così e ho pensato ho posto la mia soluzione qui:

  1. rimuovere il "DataSourceID" dalla pagina ASPX, quando non è impostato, non v'è alcun legame
  2. impostazione automatica DataSourceID nel CodeBehind solo quando è necessario DataBinding: myGridView.DataSourceID = "MyDataSource";
  3. non chiamare myGridView.DataBind() in modo esplicito, l'associazione dati avviene automaticamente al PreRender

Mi ci volle un po 'per capirlo, ma ora wverything funziona bene.

Contesto

Io uso l'ObjectDataSource perché Handels tutto il paging e l'ordinamento del GridView automaticamente per me. Sto usando un livello dati con Linq2SQL e uso i suoi metodi Skip() e Take() per caricare solo la quantità di dati necessari per popolare una pagina di GridView.

Utilizzando la SelectMethod e SelectCountMethod delle ObjectDataSource

+0

Grazie per il suggerimento. Sono andato con il suggerimento di Gavin di evitare solo il casino. Da allora la mia azienda è passata a Telerik che supporta un metodo di binding code-behind molto pulito chiamato "NeedDataSource".Tuttavia, se ho bisogno di tornare indietro, farò un tentativo. –

Problemi correlati