none
Datagridview et Collection de collection d'objets RRS feed

  • Question

  • Bonjour tout le monde,
    Je debute dans les IHM sous Csharp alors voila ma question :
    Je veux binder une datagridview avec une propriete d'une classe d'objets qui sont elements d'une collection de collections  (o-O).

    Je m'explique :
    J'ai une classe  Measures qui contient une propriete publique Double Value.
    J'ai une classe MeasureLine:Collection<Measure>
    J'ai une classe BlocOfMeasureLines:Collection<MeasureLine>

    Je veux lier ma datagridview avec un BlocOfMeasureLines et que chaque ligne de la grillle corresponde a une MeasureLine et chaque cellule de la ligne a une Measure.Value de la MeasureLine.


    Je ne trouve pas comment faire.

    Quelqu'un aurait t'il une idée ?

    lundi 24 novembre 2008 14:02

Réponses

  • Bonjour,

     

    Créez un BindingSource avec comme DataSource (en mode Design), le type de l'objet "MeasureLine".

    Ce BindingSource doit être le DataSource de votre DataGridView.

    Au niveau du code :

     

    Code Snippet

    instance = new BlocOfMeasureLines()

    monBindingSource.DataSource = instance

     

     

    Cordialement

     

    jeudi 27 novembre 2008 22:02
    Modérateur

Toutes les réponses

  • Bonjour,

     

    Créez un BindingSource avec comme DataSource (en mode Design), le type de l'objet "MeasureLine".

    Ce BindingSource doit être le DataSource de votre DataGridView.

    Au niveau du code :

     

    Code Snippet

    instance = new BlocOfMeasureLines()

    monBindingSource.DataSource = instance

     

     

    Cordialement

     

    jeudi 27 novembre 2008 22:02
    Modérateur
  • 2 ans et demi plus tard on reprend les memes et on recommence........

    le but est d'obtenir

     

    voici mon code:

    public class Item
      {
        public int Value1 { get; set; }
      }
    public class Line:Collection<Item>
      {    }
    
     public class Data : Collection<Line>
      {
      }
    
     public partial class Form1 : Form
      {
        public  Data Datas { get; set; }
    
        public Form1()
        {
          InitializeComponent();
    
          Datas = new Data();
          for (var i=0 ;i<10;i++)
          {
            var aLine = new Line();
            for (var j = 0; j < 20; j++)
            {
              aLine.Add(new Item{Value1=j+i});
    
            }
            Datas.Add(aLine);
          }
    
          gridBindingSource.DataSource =Datas;    
    }
    
     partial class Form1
      {
        /// <summary>
        /// Variable nécessaire au concepteur.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
    
        /// <summary>
        /// Nettoyage des ressources utilisées.
        /// </summary>
        /// <param name="disposing">true si les ressources managées doivent être supprimées ; sinon, false.</param>
        protected override void Dispose(bool disposing)
        {
          if (disposing && (components != null))
          {
            components.Dispose();
          }
          base.Dispose(disposing);
        }
    
        #region Code généré par le Concepteur Windows Form
    
        /// <summary>
        /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
        /// le contenu de cette méthode avec l'éditeur de code.
        /// </summary>
        private void InitializeComponent()
        {
          this.components = new System.ComponentModel.Container();
          this.dataGridView1 = new System.Windows.Forms.DataGridView();
          this.gridBindingSource = new System.Windows.Forms.BindingSource(this.components);
          this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
          this.countDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
          ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
          ((System.ComponentModel.ISupportInitialize)(this.gridBindingSource)).BeginInit();
          ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
          this.SuspendLayout();
          // 
          // dataGridView1
          // 
          this.dataGridView1.AutoGenerateColumns = false;
          this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
          this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
          this.countDataGridViewTextBoxColumn});
          this.dataGridView1.DataSource = this.gridBindingSource;
          this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
          this.dataGridView1.Location = new System.Drawing.Point(0, 0);
          this.dataGridView1.Name = "dataGridView1";
          this.dataGridView1.Size = new System.Drawing.Size(284, 262);
          this.dataGridView1.TabIndex = 0;
          // 
          // gridBindingSource
          // 
          this.gridBindingSource.DataSource = typeof(Data);
          // 
          // bindingSource1
          // 
          this.bindingSource1.DataSource = typeof(testgrid.Line);
          // 
          // countDataGridViewTextBoxColumn
          // 
          this.countDataGridViewTextBoxColumn.DataPropertyName = "Count";
          this.countDataGridViewTextBoxColumn.HeaderText = "Count";
          this.countDataGridViewTextBoxColumn.Name = "countDataGridViewTextBoxColumn";
          this.countDataGridViewTextBoxColumn.ReadOnly = true;
          // 
          // Form1
          // 
          this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
          this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
          this.ClientSize = new System.Drawing.Size(284, 262);
          this.Controls.Add(this.dataGridView1);
          this.Name = "Form1";
          this.Text = "Form1";
          ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
          ((System.ComponentModel.ISupportInitialize)(this.gridBindingSource)).EndInit();
          ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
          this.ResumeLayout(false);
    
        }
    
        #endregion
    
        private System.Windows.Forms.DataGridView dataGridView1;
        private System.Windows.Forms.BindingSource gridBindingSource;
        private System.Windows.Forms.BindingSource bindingSource1;
        private System.Windows.Forms.DataGridViewTextBoxColumn countDataGridViewTextBoxColumn;
      }
    

    Tel quel cela m'affiche la propriété "Count" de chaque ligne (soit "20")

    J'ai essayé tout un tas de combinaison sans succés.

    Quelqu'un a une idée ?

    jeudi 9 juin 2011 14:42