Dans le passé, j'ai est peuplé GridView avec des données « créées manuellement » sources dans le code derrière, en faisant cela dans le chargement de la page:Comment télécharger les données GridView après la liaison de données?
DataTable myData = SomeMethod(); //Returns a DataTable
myGrid.DataSource = myData;
myGrid.DataBind();
et chaque fois que je voulais télécharger les données dans un fichier CSV, Je voudrais simplement ajouter ce qui suit à l'événement Click du bouton:
DataTable csvData = new DataTable();
csvData = (DataTable)myGrid.DataSource;
//CSV construction, reponse send to browser, etc.
Cela fonctionne parce que le GridView est déjà DataBound au cours chargement de la page, de sorte que les données sont disponibles lorsque l'événement Click est atteinte. Mais maintenant je ne peux pas le faire fonctionner en utilisant un contrôle SqlDataSource que j'ai ajouté en temps de conception (HTML). Cette SqlDataSource est liée à un contrôle DropDown avec auto-postback, de sorte que les données sont extraites lorsque la sélection est modifiée.
Je cours le site Web, avec des données déjà affichées dans la GridView (EnableViewState = forcer la requête à chaque chargement de page), et cliquez sur le bouton, seulement pour obtenir une exception causée par le fait que myGrid.DataSource est null.
Ma question (enfin): J'ai remarqué que l'événement click se produit avant GridView_OnDataBound, mais même OnDataBound la source de données est nulle. Comment puis-je obtenir les données du GridView rendu pour autoriser le donload? Ou d'où devrais-je essayer de le récupérer?
Je viens de l'essayer et cela a fonctionné parfaitement. Je travaille généralement avec des objets de source de données créés manuellement, mais cette fois j'avais besoin d'un GridView entièrement fonctionnel (triable et pouvant être mis en page) et je ne voulais pas passer trop de temps à créer et à gérer des événements. Merci! –