Bonjour,

j'ai un formulaire qui permet de rechercher des cartes des personnes ayant le nom et le prénom saisie par l'utilisateur. Le résultat est affiché dans un datagrid.

Le problème que j'ai est le suivant :

Lorsque je saisi un nom et un prénom qui se trouve dans ma table, j'ai le datagrid qui s'affiche. Juste après, si je saisi n'importe quoi, j'ai un message m'indiquant que cette utilisateur n'existe pas dans ma base. Après, si je saisi le nom et le prénom qui j'ai saisi en premier, j'ai le message d'erreur suiavnt :
" Variable objet ou variable d'un bloc With non définie. "

j'ai débugger, j'ai trouvé que la requête renvoit bien le bon résultat, mais l'exception est générée au niveau du DataBind du Datagrid.

voici le code que j'ai écrit :

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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
'Code du boutton rechercher
 Private Sub btnRechercher_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnRechercher.Click
            Try
 
                trouve = False
                Me.setVariableSession("trouve", trouve)
 
                lblMess.Text = ""
                If DidControlCausePostBack(BtnRechercher.UniqueID) Then
 
                    If txtNom.Text <> "" And txtPrenom.Text <> "" Then
                        Dim ds As dataSet = search(txtNom.Text, txtPrenom.Text)
 
                        ' Création des colonnes du datagrid
                        CreateAllCartesColumns()
                        ' Remplissage du dataTable
                        InsertLines(ds)
                        lbltotal.Text = dv.Count.ToString
                    Else
                        PnTotal.Visible = False
                        PnBoutons.Visible = False
                        Throw New Exception("Veuillez saisir le nom et le prénom des porteurs à rechercher")
                    End If
                End If
 
            Catch ex As Exception
                UniLog.Log(ex, Me)
                lblMess.Text = erreur(ex.Message)
                lblMess.Visible = True
            End Try
 
        End Sub
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
'Fonction qui retourne le resultat de la recherche par nom et prénom dans un DataSet
    Private Function search(ByVal Nom As String, ByVal Prenom As String) As dataSet
 
            Try
                InitConnexion()
                'On recupère a partir du web.config le numéro de type_porteur 'Etudiant'
                Dim Etudiant As Integer = ConfigurationSettings.AppSettings("Etudiant")
 
                'On ajoute dans la table de hachage les paramètres de la requête
                Dim where As Hashtable = New Hashtable
                where.Add("LOWER(PS.PRENOM)", "Prenom")
                where.Add("LOWER(PS.NOM)", "Nom")
                where.Add("PR.ID_TYPE_PORTEUR", "Etudiant")
 
                'Requete sans paramètres
                Dim query As String = " SELECT T.*, P.STOCKAGE_PHOTO " & _
                " FROM PERSONNES P INNER JOIN " & _
                " (SELECT MAX(CS.DATE_ATTRIBUTION) AS Expr1, SP.NUMSERIE, PS.NOM, PS.PRENOM, PS.Dte_Naissance, PR.ID_PORTEUR, PR.ID_CARTE, PS.PHOTO, PR.ID_PERSONNE , CS.STATUT, CS.DATE_ATTRIBUTION, CS.DATE_OPPOSITION, CS.DATE_DELIVRANCE " & _
                " FROM PORTEUR PR INNER JOIN PERSONNES PS ON PR.ID_PERSONNE = PS.ID_PERSONNE INNER JOIN " & _
                " SUPPORTE SP ON PR.ID_CARTE = SP.ID_CARTE INNER JOIN " & _
                " CARTES CS ON PR.ID_CARTE = CS.ID_CARTE AND SP.ID_CARTE = CS.ID_CARTE "
 
 
                Dim groupby As String = " AND STATUT in ('ACTIF','RESERVE')" & _
                " GROUP BY PR.ID_PERSONNE, SP.NUMSERIE, PS.NOM, PS.PRENOM, PS.Dte_Naissance, PR.ID_PORTEUR, PR.ID_CARTE, PS.PHOTO, CS.STATUT, CS.DATE_ATTRIBUTION, CS.DATE_OPPOSITION, CS.DATE_DELIVRANCE) T ON  " & _
                " P.ID_PERSONNE = T.ID_PERSONNE "
 
                ' Reconstruction de la requête avec les  paramètres
                query = Provider.SelectQuery(query, where, groupby)
 
                Provider.CreateParameters(3)
 
                Nom = Nom.ToLower
                Prenom = Prenom.ToLower
 
                Provider.AddParameters(0, "Nom", Nom, DbType.String, 32)
                Provider.AddParameters(1, "Prenom", Prenom, DbType.String, 32)
                Provider.AddParameters(2, "Etudiant", Etudiant, DbType.Int32, 6)
 
                Dim ds As dataSet = Provider.FillDataSet(CommandType.Text, query)
                ' SI le Dataset est rempli, on le stock dans une variable de session
                Me.setVariableSession("DataSet", ds)
 
                Return ds
 
            Catch ex As Exception
                Throw New Exception(ex.Message)
            End Try
 
        End Function
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
19
20
21
22
 
' Procédure qui génére le DataGrid
Sub CreatDataGrid()
 
            Dim curCol As DataColumn
 
            For Each curCol In dt.Columns
                Dim NumberColumn As New BoundColumn
                NumberColumn.HeaderText = curCol.ColumnName
                NumberColumn.DataField = curCol.ColumnName
                dgStat.Columns.Add(NumberColumn)
            Next
 
            ' On cache la colonne statut et ID_CARTE
            dgStat.Columns(10).Visible = False
            dgStat.Columns(11).Visible = False
 
            'Remplissage du DataGrid
            dgStat.DataSource = dt
            dgStat.DataBind()
 
        End Sub
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
'Procédure qui rajoute les lignes de la requête à un DataTable qui est la source du Datagrid
 
Sub InsertLines(ByVal ds As dataSet)
            'On Cré 1 DataRow object et l'ajouter à la DatTable
 
            dv = ds.Tables(0).DefaultView
            Dim GestionPhoto As String = ConfigurationSettings.AppSettings("GestionPhoto")
 
            If dv.Count > 0 Then
 
                trouve = True
                Me.setVariableSession("trouve", trouve)
 
 
                For i As Integer = 0 To dv.Count - 1
                    myDataRow = dt.NewRow()
 
                    If GestionPhoto.ToUpper = "DATABASE" Then
                        SavePhotoFromDB(dv(i)("ID_PERSONNE"), dv(i)("STOCKAGE_PHOTO"), dv(i)("PHOTO"))
                    End If
 
                    ' On stocke la photo de l'étudiant
                    Dim UrlPhoto As String = System.Configuration.ConfigurationSettings.AppSettings("UrlPhoto")
                    Dim path As String = UrlPhoto + "/" + dv(i)("ID_PERSONNE") + ".jpg"
                    myDataRow("Photo") = "<img src=" & path & " width=47 height=59>"
 
                    ' On stocke le numéro de l'étudiant
                    myDataRow("N° étudiant") = dv(i)("ID_PERSONNE")
 
                    ' On stocke le nom de l'étudiant
                    myDataRow("Nom") = dv(i)("Nom")
 
                    ' On stocke le prénom de l'étudiant
                    myDataRow("Prénom") = dv(i)("Prenom")
 
                    Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR")
 
                    ' On stocke la date de naissance de l'étudiant
                    myDataRow("Né(e) le") = String.Format("{0:d}", dv(i)("Dte_Naissance"))
 
                    ' On stocke le numéro de série de la carte
                    myDataRow("N° Carte") = dv(i)("NUMSERIE")
 
                    ' On stocke le Statut de la carte
                    myDataRow("Statut") = dv(i)("STATUT")
 
                    ' On stocke le numéro de la carte
                    myDataRow("ID_CARTE") = dv(i)("ID_CARTE")
 
                    ' On stocke le numéro de la Personne
                    myDataRow("ID_PERSONNE") = dv(i)("ID_PERSONNE")
 
                    ' On stocke la date d'attribution
                    myDataRow("Date Attribution") = String.Format("{0:d}", dv(i)("DATE_ATTRIBUTION"))
 
                    ' On stocke la date de délivrance
                    myDataRow("Date Délivrance") = String.Format("{0:d}", dv(i)("DATE_DELIVRANCE"))
 
                    ' On stocke la date d'opposition
                    myDataRow("Date Opposition") = String.Format("{0:d}", dv(i)("DATE_OPPOSITION"))
 
                    dt.Rows.Add(myDataRow)
 
                Next
 
                'Remplissage du Datagrid
                CreatDataGrid()
                'On affiche le nombre de lignes
                'Dim top As String = dgStat.Height + 20
 
                'PnTotal.Style.Add("TOP", top)
                PnTotal.Visible = True
                'On affiche les boutons
                PnBoutons.Visible = True
 
            Else
                'On cache le nombre de lignes
                PnTotal.Visible = False
                'On cache les boutons
                PnBoutons.Visible = False
                If Not trouve Then
                    Throw New Exception("Opération Impossible : Usager-Carte inconnu")
                End If
            End If
 
        End Sub