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 :

garder un dataset dans une page


Sujet :

ASP.NET

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Par défaut garder un dataset dans une page
    Bonjour,

    voici mon Pb

    Dans la partie code (vb) j'ai déclarer dataset en private
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Public _Data As DataSet = Nothing
    j'arrive à le charger et l'afficher sans souci


    le pb c'est que après le 1er chargement mon dataset à comme valeur Nothing.
    et donc impossible de faire des traitements dessus

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Par défaut
    Dans ton exemple de code, ton DataSet est déclaré en Public.

    De plus, peux-tu fournir un exemple concernant l'utilisation de ton DataSet dans ta page ASP.NET ?

    Cdt,
    Kevin D.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Par défaut
    désolé pour la contradiction.

    j'ai encore changé des trucs pour faires des tests mais ça change rien au pb

    pour info j'en suis à la phase de tests donc les évenements se déroule bien dans l'ordre ou je vous les indiques

    déclaration dans l'entête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Public _Data As DataSet = Nothing
        Public Adap As OleDb.OleDbDataAdapter = Nothing
        Public cmd As OleDb.OleDbCommand = Nothing
    la procédure qui est lancé depuis un bouton
    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
    Private Sub AfficheContact()
            Dim page = CType(Me.Master, MasterPage)
            Dim Cnx = page._Cnx
     
            Multi_View.ActiveViewIndex = 0
            btnContact.Style.Value = "font-weight: 700"
            btnMessages.Style.Value = ""
     
            Dim SQL = " SELECT * FROM rq_RechercheContact"
     
            cmd = Cnx.CreateCommand
            With cmd
                .CommandType = CommandType.Text
                .CommandText = SQL
            End With
     
            Adap = New OleDb.OleDbDataAdapter(cmd)
            _Data = New DataSet
            Adap.Fill(_Data)
     
            ChpGridViewContact.DataSource = _Data
            ChpGridViewContact.DataBind()
        End Sub
    c'est ici que le dataset nommé _data est à Nothing
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      Protected Sub ChpIntitulé_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ChpIntitulé.TextChanged
     
            Dim Table = Filtre(_Data, "MonChamp like '%" & ChpIntitulé.Text & "%'")
     
            ChpGridViewContact.DataSource = Table
            ChpGridViewContact.DataBind()
     
        End Sub
    merci pour votre aide

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Par défaut
    Devant autant de réponse je me demande si je demande la lune ou si j'ai mal posé ma question

    je reformule

    est-il possible de récupérer un dataset après que celui-ci est servi à remplir un control tel qu'un gridview ?

  5. #5
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Salut,

    Qu'entend tu par récupérer un dataset ? Recupérer une nouvelle fois les données ?
    Les données présentes dans un dataset ne sont pas supprimées, même après qu'elles aient remplies un GridView.

    Si ta variable _data = nothing, c'est peut être parce que ta fonction AfficheContact() doit être en Public...

    J'espère que cela t'avancera...
    Lola

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Par défaut
    j'ai tout mis en public et ça change rien.

    je rempli un gridview avec mon datatset.
    ensuite j'ai un champ de recherche et au lieu de refaire une requete avec une condition je veux faire la recherche dans mon dataset sauf que là entre temps il est passé à nothing

  7. #7
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Est ce que entre temps la fonction a pu être réinitilisée ?

    Recharge-tu ta page ? Ce que pourrais appeler de nouveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public _Data As DataSet = Nothing


    As-tu mis des points d'arrets pour voir le cheminement de ton code ?
    Peut-on voir aussi le code qui appelle tes différentes fonctions ?

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Par défaut
    ps : la requete est une requete d'exemple mais le reste c du copier collé.

    l'erreur se produit dans le
    ChpIntitulé_TextChanged

    l'ordre des évenements :
    1) clique sur le bouton AfficheContact et mon gridview se remplit
    2) saisie de quelques lettres dans un champ, je valide avec enter et l'évenement ChpIntitulé_TextChanged se déclenche et là le dataset est à 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
    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
    Imports System.Data
    Imports System.Runtime.CompilerServices
     
    Partial Class Rechercher
        Inherits System.Web.UI.Page
     
        Public _Data As DataSet = Nothing
        Public Adap As OleDb.OleDbDataAdapter = Nothing
        Public cmd As OleDb.OleDbCommand = Nothing
     
        Public Sub btnContact_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnContact.Click
            AfficheContact()
        End Sub
     
        Public Sub btnMessages_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnMessages.Click
            AfficheMessage()
        End Sub
     
        Public Sub AfficheMessage()
            Dim page = CType(Me.Master, MasterPage)
            Dim Cnx = page._Cnx
     
            Multi_View.ActiveViewIndex = 1
            btnContact.Style.Value = ""
            btnMessages.Style.Value = "font-weight: 700"
     
            'TODO : faire suite AfficheMessage
        End Sub
     
        Public Sub AfficheContact()
            Dim page = CType(Me.Master, MasterPage)
            Dim Cnx = page._Cnx
     
            Multi_View.ActiveViewIndex = 0
            btnContact.Style.Value = "font-weight: 700"
            btnMessages.Style.Value = ""
     
            Dim SQL = " SELECT INTITULE, PRENOM, NOM FROM rq_RechercheContact"
     
            cmd = Cnx.CreateCommand
            With cmd
                .CommandType = CommandType.Text
                .CommandText = SQL
            End With
     
            Adap = New OleDb.OleDbDataAdapter(cmd)
            _Data = New DataSet
            Adap.Fill(_Data)
     
            ChpGridViewContact.DataSource = _Data.Tables(0)
            ChpGridViewContact.DataBind()
        End Sub
     
     
        Public Sub ChpIntitulé_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ChpIntitulé.TextChanged
     
            Dim Table = Filtre(_Data, "INTITULE like '%" & ChpIntitulé.Text & "%'")
     
            ChpGridViewContact.DataSource = Table
            ChpGridViewContact.DataBind()
     
        End Sub
     
        Public Function Filtre(ByVal MyDataSet As DataSet, ByVal Filtrer As String, Optional ByVal Trier As String = "") As DataTable
            Dim TableResultat As DataTable = Nothing
            Dim Tab_Rows() As DataRow
     
            'Filtre le DataSet
            Tab_Rows = MyDataSet.Tables(0).Select(Filtrer, Trier)
     
            'Créer la Strcuture de la table
            TableResultat = MyDataSet.Tables(0).Clone
     
            'Copie le résultat du filtre dans la DataTable
            For Each ligne As DataRow In Tab_Rows
                TableResultat.ImportRow(ligne)
            Next
     
            Return TableResultat
        End Function
     
    End Class

  9. #9
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Par défaut
    mais j'ai enfin trouver un post qui parle du même problème
    (j'ai pas encore essayer la solution, en cours de test...)


    http://www.developpez.net/forums/d50...e-vie-dataset/

  10. #10
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Par défaut
    Solution :

    Ajout du dataset dans le ViewState à la création
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ViewState.Add("_data", _Data)
    on récupère le dataset depuis le ViewState
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     _Data = CType(ViewState.Item("_data"), DataSet)
    et là il n'est plus à nothing


    merci à tous ceux qui ont réfléchi à mon pb

  11. #11
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    J'aurais choisi la mm solution -> envoyer mon dataset dans le viewstate. Tu aurais pu choisir la variable session par exemple (mm si c'est une solution de loin moins élégante).

    Pour la compréhension du pb, cela vient du fait que tes variables déclarées dans ta page .vb n'existent que tant que ta page est exécutée par le server.

    En d'autres termes, le server crée une instance de ta page (avec ses variables publiques/privée et membres) execute tout ce qu'il faut puis te retourne la page en la disposant de son côté.

  12. #12
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Par défaut
    Une question : le viewstat est stocké sur le serveur ?

    Si oui du coup ça sert à rien que je récupère mon dataset pour le filtrer car le contenu intégral va de nouveau voyager donc autant faire une nouvelle requete filtré et moins de donnée transit.

    ai-je bon dans la logique ou suis-je à coté ?

  13. #13
    Membre chevronné Avatar de predalpha
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 392
    Par défaut
    Le viewstate est stocké dans la page client. Regarde dans la source de ta page Web générée, c'est la ligne un peu bizarre dans le style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTUzMzAzNDcxMw9kFgICAQ9kFgICFQ8PFgIeBFRleHQFCDIwMDkwMzExZGRkp8k5KZ9PSw33mQtoaq5je7JJvkE=" />
    Cette ligne stocke en principe tout tes contrôles web asp.net. Lorsque dans ta page le client poste le formulaire (POSTBACK) le viewstate est décrypté à l'instantiation de la page. (c'est comme cela qu'il se souvient des valeurs de tes contrôles,...)

    Je ne peux pas trop te répondre concernant les perfs, ca dépend de bcp de choses (taille du dataset, temps execution requete,...) mais en tout cas si ton dataset est associé à ton gridview, ton gridview, lui est stocké dans le viewstate.

  14. #14
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Par défaut
    tout compris.

    merci

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

Discussions similaires

  1. Garder un item de menu activé dans un menu intégré dans une page php
    Par alas70 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 26/01/2010, 21h57
  2. Garder une dataset d'une page a une autre
    Par amika dans le forum Langage
    Réponses: 13
    Dernier message: 15/11/2005, 23h13
  3. Réponses: 1
    Dernier message: 08/03/2004, 11h35
  4. Verrouiller un lien dans une page
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 5
    Dernier message: 25/02/2003, 16h56
  5. comment integer une animation swf dans une page
    Par naili dans le forum Intégration
    Réponses: 7
    Dernier message: 18/09/2002, 18h54

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