2013-01-11 25 views
5

Ho cercato di trovare una risposta a questa domanda ora per giorni e trovo difficile credere che questo non possa essere fatto.Accesso ai dati recuperati

voglio arrivare al DataSet/DataTable che è costruito quando un metodo SqlDataSource.Select viene chiamato automaticamente dal ASP.NET run-time quando una pagina è in costruzione.

So che posso eseguirlo nel codice ma questo fa un secondo viaggio nel database e vorrei davvero evitare questo. Ogni esempio che ho trovato ti dice di eseguire il metodo Select nel codice sottostante.

C'è un modo per accedere ai dati che sono già stati recuperati?

+1

Sai, ho cercato di capirlo una volta, anni fa, e ho deciso che era solo più facile da legare il codice in code-behind quindi ho avuto più facile accesso al set di dati. Se qualcuno sa come farlo, potrebbe cambiare il modo in cui mi avvicino a situazioni simili che vanno avanti. +1 per chiedere. – David

+2

Non lo userei affatto. Utilizzare invece ADO.NET (ad esempio 'DataAdapter.Fill (DataTable)') o un vero mappatore ORM come NHibernate o Entity framework. Ad ogni modo, non è chiaro il motivo per cui pensi che "il codice dietro faccia un secondo viaggio nel database". Usa 'if (! IsPostBack)' allora. –

+0

Non ho davvero una scelta sul controllo. Devo apportare una modifica a una pagina esistente e non ho il lusso di riscriverla. Quando si chiama il metodo di selezione su SqlDataSource, viene eseguito un viaggio nel database in base a Microsoft http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.select.aspx – dscarr

risposta

0

Si può provare con questo codice - basata sul metodo ToTable

DataView view = (DataView)SqlDataSource.Select(...); 
DataTable table = view.ToTable(); 

Link: http://msdn.microsoft.com/en-us/library/wec2b2e6.aspx

+0

è il codice di cui sto parlando. L'esecuzione del metodo Select su SqlDataSource recupera i dati dal database. (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.select.aspx) L'ho usato molte volte ma in questo caso vorrei evitare quel secondo viaggio . – dscarr

+0

puoi spiegare –

+0

"Evita il secondo viaggio" implica che hai già ottenuto i dati da qualche parte. In tal caso, è possibile intercettare la chiamata a 'OnSelect()' durante il prerender fornendo un 'DataSource 'fittizio e sostituendo il proprio dataset (memorizzato nella cache?) Per i dati risultanti? –

Problemi correlati