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

C# Discussion :

Récupérer contenu de GridView


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Par défaut Récupérer contenu de GridView
    Bonjour,

    Ayant un Gridview j'ai voulu exporter son contenu dans un fichier Excel c'est pour ça j'ai essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable dt = (DataTable)gvHistoPlace.DataSource
    mais ca me retourne Null tandis que le gridview contient des valeurs, en plus j'ai testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (DataColumn dc in gvHistoPlace.Columns)
    mais aussi il me retourne un nombre de colonne=0. Est ce que vous avez une idée comment le faire

    Merci.

  2. #2
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Bonjour,

    Bon, commençons par le début! Tu travailles très certainement en WinForms?
    Comment alimentes-tu en données ton DataGridView?

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Par défaut
    @sisqo60 oui je travaille en winforms

    Pour le GridView en fait j'ai un serviceWeb qui me retourne une liste et moi je fait un traitement pour le transformer en Datatable puis j'affecte cette dernière comme source du GridView. Je ne cherche pas à refaire le meme traitement pour générer un fichier Excel(c'est à dire interroger le serviceWeb et transformer en Datatable), en cliquant sur un button et ayant le GridView affichant le résultat, qui aura la même source que mon GridView.

  4. #4
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Bon, j'ai pas tout compris à ta réponse, mais bon...

    tu dis que cette ligne te renvoie null :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable dt = (DataTable)gvHistoPlace.DataSource
    est-ce que gvHistoPlace.DataSource est null? Si oui, revoies ton code! si non, quel est son type?
    c'est pas logique, que ça te renvoie null si tu lui affectes un valeur de type DataTable.

    Bon dév

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Par défaut
    Salut sisqo60 je te remercie pour ton suivi, oui c'est gvHistoPlace.DataSource qui renvoi null. En fait mon code est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                { 
                    DataTable dt = new DataTable();
                    dt = afficheGrid();
                    //Bind du gridview
                    gvHistoPlace.DataSource = dt;
                    gvHistoPlace.DataBind();
                }
           }
    le Grid ce rempli bien mais par la suite quand j'ai eu besoin du contenu du grid view et le transformer en un fichier Excel j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void BExcel_Click(object sender, EventArgs e)
            {
                DataTable dt = (DataTable)gvHistoPlace.DataSource; //Le probleme que ca me rend Null
               ........
    J'espère que j'étais clair cette fois ci, si ce n'est pas le cas vous pouvez me le dire.

    Merci.

  6. #6
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Citation Envoyé par Naceur84 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                { 
                    DataTable dt = new DataTable();
                    dt = afficheGrid();
                    //Bind du gridview
                    gvHistoPlace.DataSource = dt;
                    gvHistoPlace.DataBind();
                }
           }
    Dans un premier temps ça ne sert à rien d'instancier un datatable alors que tu en récupère une instance avec la méthode afficheGrid. Bref, c'est pas le soucis, c'est juste que j'aime pas voir de code qui ne sert à rien et qui ralentit les perfs pour rien (oui je chipote)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                { 
                    DataTable dt = afficheGrid();
                    //Bind du gridview
                    gvHistoPlace.DataSource = dt;
                    gvHistoPlace.DataBind();
                }
           }
    En mode debug, que vaut la variable dt, dans ta méthode Page_Load, au moment de l'affecter à la propriété DataSource de ton instance de DataGridView? elle n'est pas null?

    Dans le code suivant que vaut l'objet leDataSource (toujours en debug)?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    protected void BExcel_Click(object sender, EventArgs e)
            {
                //Que vaut cette variable?
                object leDataSource = gvHistoPlace.DataSource;
               ........
    Si elle vaut null, c'est que ton datasource n'a pas été affecté (car le méthode afficheGrid renvoie null, mais tu aurais dû le voir car il n'y aurais rien eu dans ton datagridview) dans le premier bout de code ou qu'il a été mis à null entre temps.

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Par défaut
    Bonjour,

    Pour
    En mode debug, que vaut la variable dt, dans ta méthode Page_Load, au moment de l'affecter à la propriété DataSource de ton instance de DataGridView? elle n'est pas null?
    Comme je t'ai dis que le GridView se charge(du fait que dt!=null) mais je pense que ça a une relation avec le postBack. En fait quand je clique sur le boutton je perd le datasource du gridView je suis entrain de regarder de cette coté

  8. #8
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Ok, ça me rassure.

    Pour traquer le moment où ton datasource devient null, je te propose ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gvHistoPlace.DataSourceChanged += new EventHandler(gvHistoPlace_DataSourceChanged);
    et la méthode par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void gvHistoPlace_DataSourceChanged(object sender, EventArgs e)
    {
         MessageBox.Show("la propriété Datasource a été modifiée!!!!");
    }

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Par défaut
    J'ai essayé de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gvHistoPlace.DataSourceChanged += new EventHandler(gvHistoPlace_DataSourceChanged);
    mais j'ai tombé sur l'erreur
    'System.Web.UI.WebControls.GridView' ne contient pas une définition pour 'DataSourceChanged'
    j'ai essayé de chercher comment corriger cette erreur mais j'ai pas trouvé. Est ce que t'as une idée comment le corriger

    Merci.

  10. #10
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 230
    Par défaut
    J'ai pu trouvé une solution en fait elle consistait à sauvgarder le datasource du gridview dans un viewstate. J'ai trouvé un exemple dans ce lien http://geekswithblogs.net/dotNETvinz...textboxes.aspx. Voici mon code final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    DataTable dt = new DataTable();
                    dt = afficheGrid();
                    //Bind du gridview
                    gvHistoPlace.DataSource = dt;
                    gvHistoPlace.DataBind();
                    //sauvgarder la source du grid dans un view state
                    ViewState["CurrentTable"] = dt;
                }
            }
    et pour le boutton de génération du fichier Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    protected void BExcel_Click(object sender, EventArgs e)
            {
                DataTable dt = (DataTable) ViewState["CurrentTable"];
    Merci beaucoup pour votre aide

  11. #11
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Citation Envoyé par Naceur84 Voir le message
    J'ai essayé de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gvHistoPlace.DataSourceChanged += new EventHandler(gvHistoPlace_DataSourceChanged);
    mais j'ai tombé sur l'erreur j'ai essayé de chercher comment corriger cette erreur mais j'ai pas trouvé. Est ce que t'as une idée comment le corriger

    Merci.
    Content que tu ais pu résoudre ton problème, mais si tu es en Winforms, quel est l’intérêt d'utiliser des composants WEB?!?! (La seule raison c'est que tu ne sois pas en train de travailler en Winforms mais plutôt en ASP!!!)
    C'est pour ça que je ne comprenais pas pourquoi tu appelais ton composant un GridView alors que le composant Winforms est DataGridView... C'est aussi pour cette même raison que tu n'as pas pu trouver l'évènement DataSourceChanged...

    La philosophie Winforms et ASP sont assez différentes (même si le langage c'est du C#), donc on aurais résolu ton problème plus vite, si tu avais dit ASP dès le début.

    Bon dév

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/06/2020, 12h44
  2. Réponses: 1
    Dernier message: 02/04/2013, 11h38
  3. récupérer contenu cellule gridview
    Par realkilla dans le forum ASP.NET
    Réponses: 4
    Dernier message: 10/12/2008, 11h01
  4. Récupérer contenu d'une page HTML
    Par ArHacKnIdE dans le forum Langage
    Réponses: 9
    Dernier message: 07/11/2006, 08h56
  5. [VBA-O]Récupérer contenu message
    Par Elstak dans le forum VBA Outlook
    Réponses: 14
    Dernier message: 17/08/2006, 09h34

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