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
Partager