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:
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