Bonjour,

Je travaille sur une application ASP .NET en VB et framework 2.0.
Pour afficher des données, je fais du databinding sur un gridview principale avec une Datatable nommée dtGlobale.
Ensuite, j'utilise l'événement RowDataBound de la gridview pour "binder" des Datatables plus petites sur des gridviews incluses dans ma gridview principale.
Cela fonctionne, c'est à dire que les données attendues sont correctement affichées.

Pour générer un Export sous Excel en cliquant sur un bouton après l'affichage, j'utilise la bibliothèque NPOI. Je dispose d'une classe ExcelWorkbook dans laquelle il est possible de charger des gridviews (wb.Load(maGridView)).
J'ai donc pensé que je pourrais parcourir les Rows de ma GridView, et que à chaque fois que je trouverais une gridview incluse dans la gridview principale, je pourrais la charger dans l'export, de façon à automatiser ce traitement (et à pouvoir le réutiliser pour d'autres cas).

Or, si j'arrive à accéder aux données de la gridview principale, je constate que je n'arrive pas à accéder aux données des gridviews incluses (c'est à dire que la valeur de ma variable dtsource vaut Nothing, même quand j'essaye de récupérer la datasource d'une gridview contenant des données.)

Le code est le suivant. Ma gridview principale s'appelle gvMaGrille et mes gridviews incluses s'appellent gv1, gv2, gv3 etc.
Je précise que je passe bien dans le code :

If Not gv Is Nothing Then
dtsource = gv.DataSource
End If

mais que en sortie, dtsource vaut toujours Nothing.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
            Dim i As Integer, j As Integer
            Dim nomGv As String
            Dim dts As DataTable
            Dim dv As DataView
            Dim dtsource as DataSource
 
            For i = 0 To gvMaGrille.Rows.Count - 1
                Dim nbControles As Integer = gvMaGrille.Rows(i).Controls.Count
                For j = 0 To nbControles - 1
                    nomGv = "gv" + j.ToString()
                    Dim gv As GridView = CType(gvMaGrille.Rows(i).FindControl(nomGv), GridView)
                    If Not gv Is Nothing Then
                       dtsource = gv.DataSource
                    End If
                Next
            Next
Merci de vos suggestions.