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

Windows Forms Discussion :

Creation manuelle de colonne dans un datagridview


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Points : 24
    Points
    24
    Par défaut Creation manuelle de colonne dans un datagridview
    Bonjour,

    J'essaie actuellement de creer manuellement des colonnes dans un datagridview en recourant a un dataset dans lequel j'ai inserer 2 tables que j'ai relie en utilisant une relation. Mes 2 tables sont les suivantes :
    - Article (id, designation, prix)
    - Stock (id, quantite)
    Elles sont reliees dans la relation par id.
    Mon but etant d'afficher dans mon datagridview les 3 champs de ma table Article que j'ai indique comme etant la DataSource de mon datagridview et le champ quantite de ma table Stock.

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
     
    using Spring.Context;
    using Spring.Context.Support;
     
    using IronStickMan.Abstract.Metier.Service;
    using IronStickMan.Metier.Entite;
     
    namespace IronStickMan
    {
        public partial class Selection : Form
        {
            public Selection()
            {        
                IArticleService articleService;
                IStockService stockService;
     
                InitializeComponent();
     
                IApplicationContext context = ContextRegistry.GetContext();
                articleService = context["articleService"] as IArticleService;
                stockService = context["stockService"] as IStockService;
     
                IList<Article> listArt = articleService.getAll();
                IList<Stock> listStck = stockService.getAll();
     
                // Article
                DataTable dtArt = new DataTable("Article");
                dtArt.Columns.Add(new DataColumn("id"));
                dtArt.Columns.Add(new DataColumn("designation"));
                dtArt.Columns.Add(new DataColumn("prix"));
     
                foreach (Article art in listArt)
                {
                    DataRow drArt = dtArt.NewRow();
                    drArt["id"] = art.Id;
                    drArt["designation"] = art.Designation;
                    drArt["prix"] = art.Prix;
                    dtArt.Rows.Add(drArt);
                }
                MessageBox.Show(dtArt.Rows.Count.ToString());
                MessageBox.Show(dtArt.Columns.Count.ToString());
     
                //Stock
                DataTable dtStck = new DataTable("Stock");
                dtStck.Columns.Add(new DataColumn("id"));
                dtStck.Columns.Add(new DataColumn("quantite"));
     
                foreach (Stock stck in listStck)
                {
                    DataRow drStck = dtStck.NewRow();
                    drStck["id"] = stck.Article.Id;
                    drStck["quantite"] = stck.Quantite;
                    dtStck.Rows.Add(drStck);
                }
                MessageBox.Show(dtStck.Rows.Count.ToString());
                MessageBox.Show(dtStck.Columns.Count.ToString());
     
                // DataSet Relation entre les 2 tables
                DataSet ds = new DataSet();
                ds.Tables.Add(dtArt);
                ds.Tables.Add(dtStck);
     
                DataColumn parentColumn = ds.Tables["Article"].Columns["id"];
                DataColumn childColumn = ds.Tables["Stock"].Columns["id"];
                DataRelation rel = new DataRelation("Article_Stock", parentColumn, childColumn);
                ds.Tables["Stock"].ParentRelations.Add(rel);
     
                dgvListeProduit.AutoGenerateColumns = false;
                dgvListeProduit.DataSource = ds.Tables["Article"];
     
                // Chargement des colonnes
                /// Colonne Id
                DataGridViewTextBoxColumn dgvTbCIdArticle = new DataGridViewTextBoxColumn();
                int idArt;
                idArt = dgvListeProduit.Columns.Add(dgvTbCIdArticle);
                dgvListeProduit.Columns[idArt].DataPropertyName = "id";
                dgvListeProduit.Columns[idArt].Name = "id";
                dgvListeProduit.Columns[idArt].Visible = false;
     
                /// Colonne NomProduit
                DataGridViewTextBoxColumn dgvTbCNomArticle = new DataGridViewTextBoxColumn();
                dgvTbCNomArticle.DataPropertyName = "designation";
                dgvTbCNomArticle.HeaderText = "Nom du produit";
     
                /// Colonne Prix
                DataGridViewTextBoxColumn dgvTbCPrix = new DataGridViewTextBoxColumn();
                dgvTbCPrix.DataPropertyName = "prix";
                dgvTbCPrix.HeaderText = "Prix unitaire (TTC)";
     
                /// Colonne Quantité dispo
                DataGridViewTextBoxColumn dgvTbCQte = new DataGridViewTextBoxColumn();
                dgvTbCQte.DataPropertyName = "quantite";
                dgvTbCQte.HeaderText = "Quantite disponible";
                // TODO : Indiquer la bonne DataSource
            }
     
            private void btValiderSelect_Click(object sender, EventArgs e)
            {
                this.Hide();
                Form openVerifAchat = new VerificationAchat();
                openVerifAchat.ShowDialog(this);
            }
     
            private void btAnnulSelectArt_Click(object sender, EventArgs e)
            {
                this.Close();
                this.Owner.Show();
            }
     
            private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
     
            }
        }
    }
    J'ai deja commence a creer 2 champs utilisant la meme source en m'inspirant d'info glane sur le net ce qui explique leur syntaxe differente donc je ne suis pas sur de les avoir faits correctement. Dans la 3e colonne que j'essaie de creer et qui concerne la quantite comment puis je la lier a ma 2e table ?
    De meme n'etant pas un grand connaisseur des datagridview il y avait il un moyen plus simple pour lier mes tables et afficher les infos choisis ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Tu peux faire ça avec un dataGridViewComboBoxColumn : tu lui mets comme PropertyName "id", comme dataSource ta table de stock, comme DipslayMember "quantite", et comme ValueMember "id".

    Le plus simple reste quand même, si possible, de faire directement la jointure dans ta requête de base. Ca dépend des cas bien sûrs, mais ça vaut mieux la plupart du temps. Par exemple, l'inconvénient de la solution que je t'ai donnée ci dessus est que tu ne pourras pas trier la colonne quantite de la grille : en effet, la valeur de la cellule sera "id", c'est la valeur affichee qui sera "quantite", et le tri de la grille se base sur la valeur et non pas ur la valeur affichée.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Tu peux faire ça avec un dataGridViewComboBoxColumn : tu lui mets comme PropertyName "id", comme dataSource ta table de stock, comme DipslayMember "quantite", et comme ValueMember "id".

    Le plus simple reste quand même, si possible, de faire directement la jointure dans ta requête de base. Ca dépend des cas bien sûrs, mais ça vaut mieux la plupart du temps. Par exemple, l'inconvénient de la solution que je t'ai donnée ci dessus est que tu ne pourras pas trier la colonne quantite de la grille : en effet, la valeur de la cellule sera "id", c'est la valeur affichee qui sera "quantite", et le tri de la grille se base sur la valeur et non pas ur la valeur affichée.
    Malheureusement, une combobox uniquement pour afficher une quantite c'est pas vraiment ce qu'il y a de mieux. Mais ne peut on absolument pas passer par la relation cree dans le dataset ?

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Tu peux passer le mode d'affichage de la combo en "Normal" pour qu'elle ait toutes les apparences d'une TextBox.

    Et à ma connaissance, il n'y a pas moyen de représenter dans un DGV des données en provenance de plusieurs DataTables de façon élégante et performante. Mais j'ai encore beaucoup à apprendre et ne cherche qu'à être démenti

Discussions similaires

  1. Fixer une colonne dans un datagridview
    Par phfle1 dans le forum VB.NET
    Réponses: 3
    Dernier message: 03/05/2016, 14h10
  2. Insérer une colonne dans un DataGridView
    Par dlefebvre dans le forum VB.NET
    Réponses: 5
    Dernier message: 14/07/2008, 22h46
  3. Réponses: 6
    Dernier message: 17/06/2008, 12h28
  4. Réponses: 5
    Dernier message: 28/05/2008, 11h45
  5. [C#][VS 2005]Supprimer la première colonne dans un DatagridView
    Par cmoiscrat dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/06/2006, 16h20

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