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 :

Remplissage DataGrid par 2 Table


Sujet :

C#

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut Remplissage DataGrid par 2 Table
    Bonjour,

    Je travail sous Visual Studio .Net2003 avec une base de donnée Sqlserver 2000.

    Dans ma base j'ai 2 tables :
    * La première c'est PIECE_DETACHEE qui a comme champ : 'PD_CODART', 'PD_DESIGNART', 'PD_PU_HT_', 'PD_PU_TTC'.
    * La deuxième table c'est PIECE_CONSOMMEE qui a comme champ : 'PC_CODART', 'PC_NUMINTER'(clé étrangère de ma table intervention), 'PC_QTECONSO', 'PC_PU1MOMEN' (prix unitaire HT du moment), 'PC_PU2MOMEN'(prix unitaire TTC du moment), 'PC_REMISE'.

    Dans mon application de Visual Studio.Net2003, j'ai une combo qui me permet de remplir un dataGrid. J'aimerais que ce dataGrid ait comme colonne : 'PD_CODART', PC_QTECONSO', 'PC_PU1MOMEN', PC_PU2MOMEN', 'PC_REMISE'.
    Sachant que ma combo correspond à 'PD_DESIGNART' ou si besoin cette combo peut prendre 'PD_DESIGNART' + 'PD_CODART'. (la concaténation, je sait faire.)

    Mon souci c'est que je ne voit pas comment faire pour remplir mon dataGrid avec des champs de 2 tables.
    Le remplissage du dataGrid se fait lorsqu'on sélectionne dans la combo donc 'PD_CODART' (qui se situe dans mon dataGrid) doit porter le code de l'article correspondant à la désignation sélectionné dans la combo.

    EXEMPLE :
    Dans ma table PIECE_DETACHEE j'ai : PD_DESIGNART = Carte mère et PD_CODART = 11
    Sélection de la Combo --> Carte mère
    PD_CODART de mon dataGrid --> 11
    ...

    Est-ce que cela est-il possible??
    Si oui,comment puis-je faire??

    Merci d'avance pour votre aide.

  2. #2
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Mon souci c'est que je ne voit pas comment faire pour remplir mon dataGrid avec des champs de 2 tables
    si tu utilises une seule requete, je pense pas qu'il y ait de probleme

  3. #3
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à fally
    Bonjour,

    J'avais essayé avec une requête et ça fonctionnais pas.

    Voici le code pour remplir le DataGrid :
    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
    private void DesArt_SelectedIndexChanged_1(object sender, System.EventArgs e)
    		{
    			string PieceDetachee = ("SELECT PD_CODART as codeArt, PD_DESIGNART as designArt, PC_QTECONSO as QuantitéConso, PC_PU1MOMEN as HT, PC_PU2MOMEN as TTC, PC_REMISE as remise FROM PIECE_DETACHEE, PIECE_CONSOMMEE WHERE PIECE_DETACHEE.PD_CODART = PIECE_CONSOMMEE.PC_CODART AND PD_DESIGNART = '" + DesArt.Text + "'");
    			connection = new SqlConnection("Data Source=SNCK96400031;Initial Catalog=DistribInfo;Integrated Security=SSPI");
    			connection.Open();
    			try
    			{
    				SqlDataAdapter dataAdapter2 = new SqlDataAdapter(PieceDetachee, connection);
    				DataSet ds2 = new DataSet();
    				dataAdapter2.Fill(ds2,"PieceDetachee");
    				dataGrid3.DataSource = ds2;
    				dataGrid3.DataMember = "PieceDetachee";
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show(ex.ToString());
    			}
    			finally
    			{
    				connection.Close();
    			}  
    		}
    Le problème : lorsque je choisit la désignation dans la combo, ça m'affiche les colonne du DataGrid mais elles sont vide. Donc j'ai mis un espion sur ma requête et je l'ai ensuite testé avec l'analyseur de requête de SQL SERver2000. Mais pareil, la requête me renvoi les colonne vides.
    certes les champ de la colonne PIECE_CONSOMMEE ne sont pas rempli mais il devrais avoir quand même les colonnes de désignation et code de remplis.

    Cordialement.

  4. #4
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Le problème : lorsque je choisit la désignation dans la combo, ça m'affiche les colonne du DataGrid mais elles sont vide. Donc j'ai mis un espion sur ma requête et je l'ai ensuite testé avec l'analyseur de requête de SQL SERver2000. Mais pareil, la requête me renvoi les colonne vides.
    certes les champ de la colonne PIECE_CONSOMMEE ne sont pas rempli mais il devrais avoir quand même les colonnes de désignation et code de remplis.
    evidemment dans ta requete, ta condition "where" n'est pas vérifée puisque les champs de "PIECE_CONSOMMEE" ne sont pas remplis. la requete renvoit du vide alors

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à fally
    Ben ui mais le problème c'est ue la table PIECE_ONSOMMEE peut être vide au départ vu que je souhaite qu'on la remplisse dans le dataGrid.

    Car PIECE_DETACHEE concerneles pièces détachées que l'entreprise a a sa disposition et PIECE_CONSOMEE concerne les pièce consommé(utilisé) durant l'intervention.. (mon programme me permet de réaliser un suivi des interventions.)

    Donc comment je peux faire d'après toi fally ?? car là je vois pas du tout.

    Cordialement.

  6. #6
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut relance du sujet
    Bonjour tout le monde,

    Aprés mainte recherche pour m'en sortir je vois vraiment pas comment faire.

    J'ai demandé conseila mon professeur qui ma dit de me servir de tableau mémoire qui servira pour remplir mon DataGrid mais j'ai beau chercher, réfléchir je vois pas trop comment je peux m'en sortir.

    J'ai besoin de votre aide s'il vous plais.

    Merci d'avance!!

    P.S. : Suis d'accord avec toi fally, j'ai un problème au niveau de ma requête car je l'ai essayé sous l'analyseur de requête de SqlServer 2000 et ça m'affiche rien. Mais je sait pas comment résoudre ce problème déja.

    Cordialement!!

  7. #7
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Je pense pas que ta requête ait un problème; elle fonctionne bien mais elle renvoit pas de résultats parce que les conditions que tu as posées ne sont pas vérifiées c'est tout!
    Crée un formulaire qui pourra enregister une données dans les deux tables (selon ton contexte) et tu verras que celà marchera (enfin......je crois)

  8. #8
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à fally
    Aprés avoir vu ta réponse, je me suis mit a réfléchir encore et encore a une solution et j'en ai trouvé une(enfin je pense!!lol) qui serait de remplir mon dataGrid plus précisément les colonnes dont les champs sont vides à l'aide de TextBox et comboBox.

    Puis j'ai voulu essayé de remplir mon dataGrid à l'aide du code indiqué sur la page précédemment communiqué. J'ai donc voulu remplir une colonne de mon dataGrid à l'aide d'une comboBox (DesArt)

    Voici mon code :
    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
    private void DesArt_SelectedIndexChanged_1(object sender, System.EventArgs e)
    {
    	try
    	{
    		DataTable dt = new DataTable();
    		dt.Columns.Add("Designation",System.Type.GetType("System.varchar"));
    		DataRow dr = dt.NewRow();
    		dr["Designation"] = DesArt.SelectedValue;
    		dt.Rows.Add(dr);
    		dataGrid3.DataSource = dt;
    	}
    	catch(Exception ex)
    	{
    		MessageBox.Show(ex.ToString());
    	}
    	finally
    	{
    		connection.Close();
    	}  
    }
    Mais malheureusement cela ne fonctionne pas.
    J'ai ensuite fais du debugage et je me suis apperçus qu'arrivé a la deuxième ligne (dt.Columns.Add("Designation",System.Type.GetType("System.varchar"));) il se bloque et m'affiche l'erreur ci-joint (document word).

    Je vois pas trop pour le moment d'ou provient l'erreur.

    Merci d'avance!!

  9. #9
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    ca y es j'ai réussit a trouver la solution, cela me donne ça maintenant :
    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
    private void DesArt_SelectedIndexChanged_1(object sender, System.EventArgs e)
    {
    	try
    	{
    		DataTable dt = new DataTable();
    		dt.Columns.Add("Designation");
    		DataRow dr = dt.NewRow();
    		dr["Designation"] = DesArt.Text;
    		dt.Rows.Add(dr);
    		dataGrid3.DataSource = dt;
    	}
    	catch(Exception ex)
    	{
    		MessageBox.Show(ex.ToString());
    	}
    	finally
    	{
    		connection.Close();
    	}  
    }
    Il me reste plus qu'a voir comment je peux faire en sorte de dire que je veux rajouter une nouvelle ligne au dataGrid à chaque fois que je sélectionneré une désignation d'article(item de ma comboBox) en n'oubliant pas qu'il doit être impossible de rajouter deux fois la même désignation d'article.

    Pour l'instant c'est un peu flou dans ma tête sur comment je dois faire donc si quelqu'un a une idée pour me guidé je ne dirais pas non!!

    Merci d'avance

  10. #10
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Bonjour tout le monde,

    Voila je sais qu'il faut que je mette un for ou un foreach(enfin je pense) mais je vois pas quoi mettre comme condition pour traduire ce que je veux c'est à dire :
    rajouter une ligne au datagrid lorsque je sélectionne la désignation article de ma comboBox. (mais j'aimerais aussi faire en sorte que l'on peux pas choisir deux fois la même désignation article).

    Comment je peux faire cela??

    Aidez-moi s'il vous plais car ça fais des heures que j'y réfléchi mais je vois pas trop comment faire.

    merci d'avance!!

  11. #11
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DataTable dt ;
    DataRow dr = dt.NewRow();
    dr[0] = "champ1";
    dr[1] = "champ2";
    dt.Rows.Add(dr);
    madatagrid.DataSource = dt;
    ajoute une ligne à ma dt
    Pour ce qui est d'empêcher l'ajout d'un même élément, (j'ai eu le problème récemment), j'ai une ArrayList dans laquelle je stocke tous les "codes"(dans ton cas "Désignations") et avant d'ajouter a ma dt je vais d'abord voir si ce "code" est dejà dans ma ArrayList!
    Enfin c'est à toi de voir comment le gérer...... ça c'est de la réflexion

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à fally
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DataTable dt ;
    DataRow dr = dt.NewRow();
    dr[0] = "champ1";
    dr[1] = "champ2";
    dt.Rows.Add(dr);
    madatagrid.DataSource = dt;
    Ok mais les lignes que je rajoutes se rajoute selon ce que je sélectionne dans ma combo donc ça fonctionne pas ou alors suis con car je vois pas comment faire.

    Donc ce que tu ma donné me permet pas de dire que je veux rajouter une ligne dés que je sélectionne une désignation d'article ou alors j'ai pas compris!!lol.

    Cordialement.

  13. #13
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Ok mais les lignes que je rajoutes se rajoute selon ce que je sélectionne dans ma combo donc ça fonctionne pas ou alors suis con car je vois pas comment faire.
    Oui je suis d'accord mais c'est à toi de voir quelle valeur il faudra ajouter et quelles gymnastiques faire pour avoir cette valeur selon la "Désignation" sélectionnée dans ta combo

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à fally
    Ben par exemple :
    * Ma comboBox est composé de : "carte mère", "processeur", "carte graphique".
    * Je choisi "carte mère"
    * Alors dans mon dataGrid on ajoute "carte mère".
    * Si je décide de choisir (en plus de la "carte mère") "processeur"
    * Alors dans mon dataGrid ça rajoute une deuxième ligne avec "processeur".

    Je sait pas trop comment traduire cela en C#.

    Cordialement.

  15. #15
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DataTable dt ;
    DataRow dr = dt.NewRow();
    dr[0] = MaCombo.Text;
    dt.Rows.Add(dr);
    madatagrid.DataSource = dt;

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à fally
    J'ai déja essayé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DataTable dt ;
    DataRow dr = dt.NewRow();
    dr[0] = MaCombo.Text;
    dt.Rows.Add(dr);
    madatagrid.DataSource = dt;
    mais ça fonctionne pas car ça m'affiche l'erreur suivant :
    Utilisation d'une variable locale non assigné 'dt' au niveau de ''DataRow dr = dt.NewRow();".

    Mais si je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DataTable dt = new DataTable() ;
    DataRow dr = dt.NewRow();
    dr[0] = MaCombo.Text;
    dt.Rows.Add(dr);
    madatagrid.DataSource = dt;
    ça me dit : Impossible de trouver la colonne 0.

    Je comprend vraiment pas comment faire.

    Désolé de t'embéter autant!!

    Cordialement.

  17. #17
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dt = new DataTable() ;// tu déclares DataTable dt en haut dans tes variables
    DataRow dr = dt.NewRow();
    dr[0] = MaCombo.Text;
    dt.Rows.Add(dr);
    madatagrid.DataSource = dt;
    PS : Nous sommes sur un forum et chacun y est pour soit aider l'autre ou demander de l'aide : tu me déranges pas du tout

  18. #18
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à fally
    Je viens de faire ce que tu ma dit mais malheureusement il m'affiche une erreur : "Il ne trouve pas la colonne 0".
    Ce message arrive lorsque : je suis sur la troisième ligne du code.(normal tu me dira.)



    PS : Nous sommes sur un forum et chacun y est pour soit aider l'autre ou demander de l'aide : tu me déranges pas du tout
    Certes mais tu as tes problème a résoudre pour ça que je te dis ça.

    Cordialemen!!

  19. #19
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Ta dataGrid a combien de colonnes?

  20. #20
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à fally
    Ben si on regarde le code aucune, donc je comprend pas trop ou tu veux en venir avec ton code en fet?? !!

    Sinon même si je rajoute dans le code : dt.Columns.Add("Designation");
    et que je laisse dr[0] = MaCombo.Text; ca fonctionne mais lorsque je veux rajouter une ligne(que je sélectionne une deuxième désignation) ben ça la met à la place de la première.

    Alors que je souhaiterais que ça la mette en dessous.

    Merci d'avance!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/10/2013, 10h03
  2. Remplissage DATAGRID avec une requete et pas la table
    Par nabileon dans le forum VB.NET
    Réponses: 8
    Dernier message: 14/02/2013, 20h13
  3. [AC-2007] Remplissage treeview par une table unique
    Par diombo dans le forum VBA Access
    Réponses: 0
    Dernier message: 14/02/2010, 12h08
  4. Datagrid alimenté par 2 tables : tri
    Par doudou87 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/12/2009, 17h49
  5. Remplissage datagrid par code
    Par santacrus dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/09/2009, 17h47

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