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

Accès aux données Discussion :

[C#] Comment remplir un DataTable typé avec un DataSet ?


Sujet :

Accès aux données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 91
    Points : 78
    Points
    78
    Par défaut [C#] Comment remplir un DataTable typé avec un DataSet ?
    Bonjour à tous,

    je n'arrive pas à remplir une DataTable que j'ai définie avec le résultat d'une requête.
    En gros, je vais chercher deux colonnes dans une base de données, et j'aimerais que s'affiche dans mon DataGridView trois colonnes.
    Pour ce faire, j'ai défini une DataTable avec trois colonnes, j'en remplis deux (théoriquement) avec ma requête via un DataSet retourné par une méthode et je définis ensuite ma DataTable comme source de mon DataGridView.

    Mais mon DataGridView affiche désespéremment que les deux colonnes que j'ai rempli dans ma DataTable... La troisième est partie au lavage >_<

    Quelqu'un saurait d'où vient le problème ?

    Merci.

  2. #2
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    avant l'affichage des donnees ton datatable contient bien les 3 collonnes ??

    si oui il ne te reste plus qu'a faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mondatagrid.datasource = mondatatable;
    peut -etre que tu associe ton datagrid a ton dataset et pas ta datatable.

  3. #3
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    Je comprend pas, comment tu définis les data de ta 3 ième colonne ?

    un peu de code ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 91
    Points : 78
    Points
    78
    Par défaut
    Voilà la méthode qui rempli le DataGridView.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void FillAvailableControls()
    {
                ADO.DataTableName = "GetControls";
                DataTable dt = new DataTable();
                dt.Columns.Add(new DataColumn("ControlName", typeof(String)));
                dt.Columns.Add(new DataColumn("ControlDescription", typeof(String)));
                dt.Columns.Add(new DataColumn("Visible", typeof(Boolean)));
                dt = ADO.ExecuteStoredProcedureControls(ADO.DataTableName, lbxAvailableFunctionalities.SelectedItem.ToString()).Tables[ADO.DataTableName];
                dgvAvailableControls.DataSource = dt;
    }
    La méthode ExecuteStoredProcedureControls rempli un DataSet, avec une seule table dedans. La DataTable du DataSet est remplie avec deux colonnes.

    Je pensais qu'en remplissant une DataTable avec trois colonnes, avec le DataSet.Tables de deux colonnes que la troisième s'afficherait quand même.

  5. #5
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    éssaye de mettre la propriété AutoGenerateColumns à True dans ton datagridview

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 91
    Points : 78
    Points
    78
    Par défaut
    Nan il veut toujours pas...
    Théoriquement ça ne devrait pas lui poser de problème de remplir une DataTable de trois colonnes avec une autre de deux...
    J'ai respecté l'ordre et le type... Je me demande ce qu'il lui faut de plus.

  7. #7
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    ADO.ExecuteStoredProcedureControls renvoie une datatable avec 2 colonne c'est bien ca??

    ensuite lorsque tu fais dt = ado.exe.datatable2col;
    il fait une copie par reference et donc to datagrid prend comme datasource ado.exe.datatable2col et nom ta dt a 3 collonne.

    pour cela il te faut lire les donnees de ado.exe.datatable2col et remplire dt;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach(datarow dr in datatable2col)
    {
       Datarow drnew = dt.newRow();
       drnew[0]=dr[0];
       drnew[1]=dr[1];
       dt.addRow(drnew);
    }
     
    datagrid.datasource=dt;
    il doit y avoir des erreur de case ou de nom de type mais voila a quoi ca devrait ressembler je pense.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 91
    Points : 78
    Points
    78
    Par défaut
    Il n'y a pas moyen de faire ça directement ??
    C'est un peu idiot...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 91
    Points : 78
    Points
    78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach (DataRow dr in dt2.Rows)
    {
          DataRow drnew = dt.NewRow();
          drnew[0] = dr[0];
          drnew[1] = dr[1];
          dt.Rows.Add(drnew);
    }
    Voilà à quoi ça ressemble avec la bonne syntaxe.
    Mais faire ça en deux fois, je trouve ça dommage...
    Enfin ça marche... à moins que quelqu'un n'ai une autre solution plus directe.

  10. #10
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    T'as éssayé de rajouter la colonne aprés avoir récupéré le dataset de ta procédure stockée ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 91
    Points : 78
    Points
    78
    Par défaut
    Je viens d'essayer : ça marche

    Merci bien à tous les deux !

  12. #12
    Membre éclairé Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Points : 774
    Points
    774
    Par défaut
    effectimevent + 1 neo je me sens des fois mais a un point.

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

Discussions similaires

  1. [Débutant] comment remplir un datagrid view avec un listviewitem
    Par aymenmyno dans le forum C#
    Réponses: 3
    Dernier message: 20/11/2012, 09h49
  2. Comment remplir des champs TEXTES avec des SESSIONS
    Par GoodWear dans le forum Langage
    Réponses: 14
    Dernier message: 28/10/2009, 10h12
  3. Comment remplir un menu déroulant avec VBA ??
    Par souheil59 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 17/11/2008, 22h19
  4. comment remplir un doc word avec un formulaire
    Par enretard dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/07/2008, 10h12
  5. Comment remplir une liste déroulante avec une macro sans doublons
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/06/2007, 18h34

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