IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Variable objet ou variable d'un bloc With non définie.


Sujet :

ASP.NET

  1. #1
    Membre régulier Avatar de paradeofphp
    Inscrit en
    Décembre 2005
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 313
    Points : 94
    Points
    94
    Par défaut Variable objet ou variable d'un bloc With non définie.
    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

  2. #2
    Membre régulier Avatar de paradeofphp
    Inscrit en
    Décembre 2005
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 313
    Points : 94
    Points
    94
    Par défaut
    J'ai cherché, j'ai trouvé que le bug sort de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
          Private Sub dgStat_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles dgStat.ItemCreated
                If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.SelectedItem Then
                    e.Item.Attributes.Add("onmouseover", "this.style.cursor='hand'")
                    e.Item.Attributes.Add("onclick", "javascript:__SelectRow(this,'" & e.Item.ItemIndex & "','" & e.Item.DataItem("ID_PERSONNE") & "','" & e.Item.DataItem("STATUT") & "','" & e.Item.DataItem("ID_CARTE") & "')")
     
                End If
            End Sub
    et surtout de la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     e.Item.Attributes.Add("onclick", "javascript:__SelectRow(this,'" & e.Item.ItemIndex & "','" & e.Item.DataItem("ID_PERSONNE") & "','" & e.Item.DataItem("STATUT") & "','" & e.Item.DataItem("ID_CARTE") & "')")
    lorsque j'ai enlevé '" & e.Item.DataItem("ID_PERSONNE") & "','" & e.Item.DataItem("STATUT") & "','" & e.Item.DataItem("ID_CARTE") & "', tout a bien marché. Mais moi j'ai besoin de récupérer ces valeurs apèrs chaque clique. avez-vous une idée pour règler ceci ?

  3. #3
    Membre régulier Avatar de paradeofphp
    Inscrit en
    Décembre 2005
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 313
    Points : 94
    Points
    94
    Par défaut
    voila ca marche, ouuuuf.

    j'ai rajouté ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    If Not e.Item.DataItem Is Nothing Then
                        e.Item.Attributes.Add("onclick", "javascript:__SelectRow(this,'" & e.Item.ItemIndex & "','" & e.Item.DataItem("ID_PERSONNE") & "','" & e.Item.DataItem("STATUT") & "','" & e.Item.DataItem("ID_CARTE") & "')")
                    End If

    Merci a vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/09/2008, 20h14
  2. Variable objet ou variable bloc with non définie
    Par tarbala dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/05/2008, 12h19
  3. Variable objet ou variable de bloc With non définie
    Par sl1980 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2007, 19h15
  4. Réponses: 11
    Dernier message: 12/06/2007, 09h26
  5. Réponses: 13
    Dernier message: 01/06/2006, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo