2013-01-11 8 views
5

J'essaie de trouver une réponse à cette question depuis des jours et j'ai du mal à croire que cela ne puisse être fait.Accéder aux données récupérées

Je veux aller à la DataSet/DataTable qui est construit lorsqu'une méthode SqlDataSource.Select est appelée automatiquement par l'exécution ASP.NET lorsqu'une page est en cours de construction.

Je sais que je peux l'exécuter en code, mais cela fait un deuxième voyage à la base de données et je voudrais vraiment éviter cela. Chaque exemple que j'ai trouvé vous dit d'exécuter la méthode Select dans le code derrière.

Y a-t-il un moyen d'accéder aux données qui ont déjà été récupérées?

+1

Vous savez, j'ai essayé de comprendre cela une fois, il y a des années, et a décidé qu'il était plus facile de lier le code dans le code-behind donc j'ai eu un accès plus facile à l'ensemble de données. Si quelqu'un sait comment faire cela, cela pourrait changer la façon dont j'aborde des situations similaires à l'avenir. +1 pour demander. – David

+2

Je n'utiliserais pas ce contrôle du tout. Au lieu de cela, utilisez ADO.NET (par exemple 'DataAdapter.Fill (DataTable)') ou un vrai mappeur ORM comme NHibernate ou Entity framework. De toute façon, il n'est pas clair pourquoi vous pensez que "le code derrière fait un deuxième voyage dans la base de données". Utilisez 'if (! IsPostBack)' alors. –

+0

Ne pas vraiment avoir le choix sur le contrôle. J'ai besoin de changer une page existante et je n'ai pas le luxe de la réécrire. Lorsque vous appelez la méthode Select sur le SqlDataSource, il effectue un déplacement vers la base de données selon Microsoft http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.select.aspx – dscarr

Répondre

0

Vous pouvez essayer avec ce code - basé sur la méthode Totable

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

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

+0

est le code dont je parle. L'exécution de la méthode Select sur SqlDataSource récupère les données de la base de données. (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.select.aspx) Je l'ai utilisé plusieurs fois mais dans ce cas je voudrais éviter ce second voyage . – dscarr

+0

pouvez-vous expliquer –

+0

"Évitez le deuxième voyage" implique que vous avez déjà les données quelque part. Dans ce cas, pouvez-vous intercepter l'appel de 'OnSelect()' pendant le prerender en fournissant un 'DataSource' factice, et substituer votre propre ensemble de données (mis en cache?) Pour les données résultantes? –

Questions connexes