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 :

problème de GridView


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut problème de GridView
    Bonjour,
    je débute depuis une semaine sur l'asp.net, mon problème réside dans un GridView.

    je souhaiterai tous simplement y afficher le resultat d'une requête (SELECT *). Grâçe à Visual Studio, j'ai pu voir que ma connection au serveur (MySQL en local) et que ma requete fonctionne parfaitement.
    Cependant le GridView m'affiche :

    ****************
    *RowError*HasErrors*
    ****************

    De plus, le GridView affiche 3 lignes vides (a part l'entête), ce qui correspond au nombre de resultat de ma requete.
    Donc le probleme réside dans mes colonnes qui ne s'affiche pas.
    Voici le code de mon GridView (ya pas plus simple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <asp:GridView ID="gv_operateur" runat="server" DataSourceID="objRes" 
             style="margin-left: 40px; margin-top: 40px">
        </asp:GridView>
        <asp:ObjectDataSource ID="objRes" runat="server" SelectMethod="MetodListOp" 
             TypeName="classCommandSql"></asp:ObjectDataSource>
    Si quelqu'un aurait une petite idée !!!
    Merci d'avance.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 360
    Par défaut
    tu peux essayer peut être de rajouter la propriété AutoGenerateColumns=true dans ton gridview.

    Sinon tu peux définir le template de tes colonnes. Regarde ici http://msdn.microsoft.com/en-us/library/aa479353.aspx

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    elle ressemble à quoi ta méthode MetodListOp ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut
    Voila "MetodListOp" mais c'est pas tellement important vu que ma requete fonctionne (je pense).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     MySQLConnection objConn = new MySQLConnection(new MySQLConnectionString("localhost", "suiviprod", "root", "mdp").AsString);           
                objConn.Open();
                //commande sql
                MySQLCommand MCO = new MySQLCommand("Select * from OPERATEUR", objConn);           
                MySQLDataReader objRes;
                objRes = MCO.ExecuteReaderEx();
     
                return objRes;


    j'ai déjà essayer ça et c'est le même resultat.

    J'ai tester avec des <TemplateFields> et des <ItemTemplate> en ecrivant en dur dans les entête de colonnes, cette fois les entête sont remplis (normal) et les cellules sont vides. Et j'ai toujours "RowError" et "HasErrors" dans les deux dernieres colonnes.

    Si je mais AutoGenerateColumns=false, le "RowError""HasError" disparait mais mes cellules sont toujours vide.

    J'espere avoir été claire.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut
    J'ai tenter une autre méthode.

    Voila ma classe "classCommandSql" avec ma methode "MetodListOp"
    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
    public class classCommandSql
    {
        public MySQLConnection objRes = null; 
     
    //***************Liste des operateur************************
            public object MetodListOp()
            {     
                MySQLConnection objConn = new MySQLConnection(new MySQLConnectionString("localhost", "suiviprod", "root", "mdp").AsString);           
                objConn.Open();
                //commande sql
                MySQLCommand MCO = new MySQLCommand("Select * from OPERATEUR", objConn);           
                MySQLDataReader objRes;
                objRes = MCO.ExecuteReaderEx();
     
                return objRes;
            }

    Et là ma page asp, dans Page_Load
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    classCommandSql c = new classCommandSql();                                 
                    gv_operateur.DataSource = c.MetodListOp();
                    gv_operateur.DataBind();
    "gv_operateur" c'est l'id de mon GridView

    Malheureusement, même resultat

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Par défaut
    ExecuteReaderEx() te retourne bien un object SqlDataReader ?

    Bind Data Reader

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ca n'a pas vraiment de sens de renvoyer un DataReader... ObjectDataSource utilise la réflexion pour déterminer les propriétés de l'objet à afficher. Mais dans un DataReader, les valeurs des champs ne sont pas des propriétés, ce sont des éléments auxquels on accède via un accesseur. ObjectDataSource sert plutôt à afficher des objets métier. Pour afficher des données qui viennent directement de la BDD, utilise plutôt SqlDataSource

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut
    J'utilise le driver "MySQLDriverCS", donc il faut que j'utilise des propriété MySQL. Non?

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2006
    Messages : 61
    Par défaut
    Bonjour,

    objRest dans la méthode MetodListOp() est un sqlReader.
    Il faudrait tester si il contient bien les données :
    http://msdn.microsoft.com/fr-fr/libr...yz(VS.80).aspx
    Si le GridView n'a rien je pense que l'erreur vient en fait de là.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Par défaut
    Comme dit Tomlev, utiliser un SqlDataReader juste pour faire un bind de la gridview, c'est un peu étrange.
    Maintenant, tu en as peut etre besoin vu que tu retournes object, peut etre vas tu utiliser cette méthode pour faire autre chose.

    Ou alors, tu peux remplir un dataSet et faire in bind très facilement avec cela.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut
    En effet cette methode va me servir plus tard. Mais je débute, alors je me débrouille peut être mal. Merci pour vos conseil.

    L'objet que je retourne a bien les valeurs attendues.
    Pour être plus claire, ma table OPERATEUR contient 3 enregistrements, et mon GridView créé 3 lignes, mais vide. Il a a peu près cette allure :

    *****************
    *RowError*HasErrors *
    *****************
    avec 3 ligne vides.

    Désolé de ne pas envoyer d'imprEcr

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Essaie de créer une autre méthode qui utilise MetodListOp mais renvoie un DataTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public DataTable MetodListOpTable()
    {
        DataTable dt = new DataTable();
        using (DbDataReader rd = MetodListOp())
        {
            DbDataAdapter ad = new MySQLDataAdapter();
            ad.Fill(dt, rd);
        }
        return dt;
    }
    Et utilise cette méthode comme SelectCommand de ton ObjectDataSource

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut
    Je suis en train de tester ta méthode tomlev, mais j'ai une petite erreur qui me dit
    "impossible de convertir le type 'object' en 'DbDataReader' " pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using (DbDataReader rd = MetodListOp())
    J'ai oublier quelque chose ? Un using peut être ?

    En tout cas l'idée est bonne !

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    modifie la signature de MetodListOp pour indiquer qu'elle renvoie un DbDataReader

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut
    Désolé de ramer sur des erreurs bètes mais j'ai la même erreur.

    J'ai modifié ma classe :
    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
    public class classCommandSql
    {
        public MySQLConnection objConn = null;
        public DbDataReader objRes = null;
     
            public object MetodListOp()
            {     
                ...
                //commande sql
                MySQLCommand MCO = new MySQLCommand("Select * from OPERATEUR", objConn);           
     
                objRes = MCO.ExecuteReaderEx();
     
                return objRes;
     
     public DataTable MetodListOpTable()
            {
               ... 
            }  
    }
    Mon objRes est pourtant un DbDataReader !

  16. #16
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par grominet_79 Voir le message
    Mon objRes est pourtant un DbDataReader !
    Je sais bien
    Mais la méthode indique qu'elle renvoie un object, et il n'y a pas de conversion implicite de object vers DbDataReader. Donc soit tu fais une conversion explicite (cast), soit tu déclares que MetodListOp renvoie un DbDataReader

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut
    Décidemment on va pas s'en sortir, il me dit maintenant que la propriété Fill n'est pas accessible en raison de son niveau de protection.

    On y est presque!

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Arf... désolé, j'ai pas fait gaffe, en fait cette surcharge de Fill est protected, donc tu ne peux pas l'utiliser... Ca me semblait le moyen le plus simple de remplir la DataTable avec un DbDataReader.

    Sinon tu peux toujours écrire la fonction comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public DataTable MetodListOpTable()
    {
        MySQLConnection objConn = new MySQLConnection(new MySQLConnectionString("localhost", "suiviprod", "root", "mdp").AsString);
        objConn.Open();
        MySQLCommand MCO = new MySQLCommand("Select * from OPERATEUR", objConn);
        DbDataAdapter ad = new MySQLDataAdapter(MCO);
        ad.Fill(dt);
        return dt;
    }

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Par défaut
    C'est nikel.
    Il fallait simplement utiliser un DataTable

    Merci beaucoup tomlev. Vai pouvoir bosser maintenant

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

Discussions similaires

  1. Problème avec gridview
    Par hugo7 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 26/11/2008, 14h45
  2. Problème avec Gridview SelectedRow
    Par yass dans le forum ASP.NET
    Réponses: 2
    Dernier message: 09/07/2008, 11h55
  3. [2.0] Problème de GridView
    Par CUCARACHA dans le forum ASP.NET
    Réponses: 3
    Dernier message: 09/05/2008, 13h43
  4. [ASP.NET] Problème de gridview
    Par castaka dans le forum ASP.NET
    Réponses: 2
    Dernier message: 11/10/2007, 16h23
  5. Problème taille gridview quand update
    Par lolymeupy dans le forum ASP.NET
    Réponses: 0
    Dernier message: 16/08/2007, 10h40

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