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]