DataSet DataTable Relation Trouble
With these tables: Parent, Child, and GrandChild.
Each table has an Id, ParentId and Name field. (except the top Parent table)
With these Relations:
ds.Relations.Add("ParentToChild",ds.Tables["Parents"].Columns["Id"],ds.Tables["Children"].Columns["ParentId"],true);
ds.Relations.Add("ChildToGrandChild",ds.Tables["Children"].Columns["Id"],ds.Tables["GrandChildren"].Columns["ChildId"],true);
And these "related columns":
ds.Tables["Children"].Columns.Add("ParentName",typeof(string),"Parent(ParentToChild).Name");
ds.Tables["GrandChildren"].Columns.Add("GrandParentName",typeof(string),"Parent(ChildToGrandChild).ParentName");
using System;
using System.Windows.Forms;
using System.Data;
namespace DataSetTest
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.DataGrid dataGrid1;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.dataGrid1 = new System.Windows.Forms.DataGrid();
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
this.SuspendLayout();
//
// dataGrid1
//
this.dataGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.dataGrid1.DataMember = "";
this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid1.Location = new System.Drawing.Point(8, 8);
this.dataGrid1.Name = "dataGrid1";
this.dataGrid1.Size = new System.Drawing.Size(280, 248);
this.dataGrid1.TabIndex = 0;
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.dataGrid1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void Form1_Load(object sender, System.EventArgs e)
{
DataSet ds = new DataSet("TestDataSet");
ds.Tables.Add(ParentTable());
ds.Tables.Add(ChildTable());
ds.Tables.Add(GrandChildTable());
ds.Relations.Add("ParentToChild",ds.Tables["Parents"].Columns["Id"],ds.Tables["Children"].Columns["ParentId"],true);
ds.Relations.Add("ChildToGrandChild",ds.Tables["Children"].Columns["Id"],ds.Tables["GrandChildren"].Columns["ChildId"],true);
ds.Tables["Children"].Columns.Add("ParentName",typeof(string),"Parent(ParentToChild).Name");
ds.Tables["GrandChildren"].Columns.Add("GrandParentName",typeof(string),"Parent(ChildToGrandChild).ParentName");
dataGrid1.DataSource = ds;
}
private DataTable ParentTable()
{
DataTable dt = new DataTable("Parents");
DataColumn dc = new DataColumn("Id");
dt.Columns.Add(dc);
dc = new DataColumn("Name");
dt.Columns.Add(dc);
return dt;
}
private DataTable ChildTable()
{
DataTable dt = new DataTable("Children");
DataColumn dc = new DataColumn("Id");
dt.Columns.Add(dc);
dc = new DataColumn("ParentId");
dt.Columns.Add(dc);
dc = new DataColumn("Name");
dt.Columns.Add(dc);
return dt;
}
private DataTable GrandChildTable()
{
DataTable dt = new DataTable("GrandChildren");
DataColumn dc = new DataColumn("Id");
dt.Columns.Add(dc);
dc = new DataColumn("ChildId");
dt.Columns.Add(dc);
dc = new DataColumn("Name");
dt.Columns.Add(dc);
return dt;
}
}
}