Help!

PC-Problemen?
De vrijwilligers van Oplossing.be zoeken gratis met u mee!

Hulp bij posten

Recente topics

Auteur Topic: .NET : Opvullen van DataGrid control met DataRelation and ParentRows  (gelezen 1534 keer)

0 leden en 1 gast bekijken dit topic.

Offline AquariusJK

  • Volledig lid
  • **
  • Berichten: 128
Hi,

In C# probeer ik een DataGrid te gebruiken in een windows formulier. Voor de DataGrid op te vullen gebruik ik een DataSet die bestaat uit verschillende DataTables (A en B). De DataRows uit B zijn gelinkt aan 1 DataRow uit A (dmv de methode SetParentRow). Verder is er ook een DataRelation tussen A.ID en B.Parent.

Als ik de DataGrid gewoon opvul dan krijg ik als resultaat iets zoals in de figuren A en B uit de bijlage, waarbij ik dus eerst op de naam van de DataRelation moet clicken om de andere gegevens te zien.

Ik zou het graag hebben zoals in figuur C (Access doet dit zonder probleem). Ik heb al verschillende mogelijkheden gezocht, maar het lukt niet.

Weet er iemand wat ik juist moet doen? Hieronder staat de code die ik heb.

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Test1
{
   public class Form1 : System.Windows.Forms.Form
   {
      private System.ComponentModel.Container components = null;
      private System.Windows.Forms.DataGrid dataGrid1;
      private DataSet data;

      public Form1()
      {
         //
         // Required for Windows Form Designer support
         //
         InitializeComponent();

         //
         // TODO: Add any constructor code after InitializeComponent call
         //
         data = new DataSet();
         InitDataSet(ref data);
         AddData(ref data);

         dataGrid1.DataSource = data;
         dataGrid1.DataMember = "A";
      }

      protected override void Dispose( bool disposing )
      {
         if( disposing )
         {
            if (components != null)
            {
               components.Dispose();
            }
         }
         base.Dispose( disposing );
      }

      #region Windows Form Designer generated code
      private void InitializeComponent()
      {
         this.dataGrid1 = new System.Windows.Forms.DataGrid();
         ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
         this.SuspendLayout();
         //
         // dataGrid1
         //
         this.dataGrid1.AlternatingBackColor = System.Drawing.Color.GhostWhite;
         this.dataGrid1.BackColor = System.Drawing.Color.GhostWhite;
         this.dataGrid1.BackgroundColor = System.Drawing.Color.Lavender;
         this.dataGrid1.BorderStyle = System.Windows.Forms.BorderStyle.None;
         this.dataGrid1.CaptionBackColor = System.Drawing.Color.RoyalBlue;
         this.dataGrid1.CaptionFont = new System.Drawing.Font("Microsoft Sans Serif", 8F);
         this.dataGrid1.CaptionForeColor = System.Drawing.Color.White;
         this.dataGrid1.DataMember = "";
         this.dataGrid1.FlatMode = true;
         this.dataGrid1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F);
         this.dataGrid1.ForeColor = System.Drawing.Color.MidnightBlue;
         this.dataGrid1.GridLineColor = System.Drawing.Color.RoyalBlue;
         this.dataGrid1.HeaderBackColor = System.Drawing.Color.MidnightBlue;
         this.dataGrid1.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 8F);
         this.dataGrid1.HeaderForeColor = System.Drawing.Color.Lavender;
         this.dataGrid1.LinkColor = System.Drawing.Color.Teal;
         this.dataGrid1.Name = "dataGrid1";
         this.dataGrid1.ParentRowsBackColor = System.Drawing.Color.Lavender;
         this.dataGrid1.ParentRowsForeColor = System.Drawing.Color.MidnightBlue;
         this.dataGrid1.SelectionBackColor = System.Drawing.Color.Teal;
         this.dataGrid1.SelectionForeColor = System.Drawing.Color.PaleGreen;
         this.dataGrid1.Size = new System.Drawing.Size(560, 432);
         this.dataGrid1.TabIndex = 0;
         //
         // Form1
         //
         this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
         this.ClientSize = new System.Drawing.Size(560, 429);
         this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                        this.dataGrid1});
         this.Name = "Form1";
         this.Text = "Form1";
         ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
         this.ResumeLayout(false);

      }
      #endregion

      [STAThread]
      static void Main()
      {
         Application.Run(new Form1());
      }

      private void InitDataSet(ref DataSet dataSet)
      {
         DataTable t;

         dataSet.Clear();

         t = new DataTable("A");
         t.Columns.Add(new DataColumn("ID", Type.GetType("System.Int32")));
         t.Columns.Add(new DataColumn("Name", Type.GetType("System.String")));

         dataSet.Tables.Add(t);

         t = new DataTable("B");
         t.Columns.Add(new DataColumn("ID", Type.GetType("System.Int32")));
         t.Columns.Add(new DataColumn("Parent", Type.GetType("System.Int32")));
         t.Columns.Add(new DataColumn("Name", Type.GetType("System.String")));

         dataSet.Tables.Add(t);

         dataSet.Relations.Add("Child", dataSet.Tables["A"].Columns["ID"], dataSet.Tables["B"].Columns["Parent"]);
      }

      private void AddData(ref DataSet dataSet)
      {
         DataRow newParentRow, newChildRow;

         // Parentrow maken
         for(int p = 1; p < 5; p++)
         {
            newParentRow = dataSet.Tables["A"].NewRow();
            newParentRow["ID"] = p;
            newParentRow["Name"] = String.Format("Parent {0}", p);
            dataSet.Tables["A"].Rows.Add(newParentRow);

            for(int c = 0; c < 3; c++)
            {
               // Childrow maken
               newChildRow = dataSet.Tables["B"].NewRow();
               newChildRow["ID"] = c * 4 + p;
               newChildRow["Parent"] = p;
               newChildRow["Name"] = String.Format("Child {0}", c * 4 + p);
               newChildRow.SetParentRow(newParentRow);

               dataSet.Tables["B"].Rows.Add(newChildRow);
            }
         }
      }
   }
}


[verwijderd door de admin]
Win2K SP4 - ASUS A7V600 - AMD Athlon XP 2800+ Barton (333MHz) - 512 MB DDRRAM (400MHz) - Hercules Ati Radeon 9600SE - Maxtor 80GB HD - Pinnacle PCTV - Telenet

 


www.combell.com