using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
DataSet ds = new DataSet();
//以下示例实现 利用dataset的Relations为两个DataTable创建类似SQL中Left join 的效果
//From chj
//定义数据结构
DataTable Ks = new DataTable("客商"); //左表or主表
DataColumn dcID = new DataColumn("ID", System.Type.GetType("System.Int32"));
DataColumn dcNa = new DataColumn("客商名称", System.Type.GetType("System.String"));
Ks.Columns.Add(dcID);
Ks.Columns.Add(dcNa);
DataTable Dj = new DataTable("订单");//右表or子表
DataColumn dcID2 = new DataColumn("ID", System.Type.GetType("System.Int32"));
DataColumn dcNu = new DataColumn("订单数量", System.Type.GetType("System.Int32"));
Dj.Columns.Add(dcID2);
Dj.Columns.Add(dcNu);
//左表数据
DataRow KsDt = Ks.NewRow();
KsDt["ID"] = 11;
KsDt["客商名称"] = "张三";
Ks.Rows.Add(KsDt);
KsDt = Ks.NewRow();
KsDt["ID"] = 12;
KsDt["客商名称"] = "李四";
Ks.Rows.Add(KsDt);
KsDt = Ks.NewRow();
KsDt["ID"] = 13;
KsDt["客商名称"] = "王武";
Ks.Rows.Add(KsDt);
KsDt = Ks.NewRow();
KsDt["ID"] = 14;
KsDt["客商名称"] = "赵柳";
Ks.Rows.Add(KsDt);
//右表数据
KsDt = Dj.NewRow();
KsDt["ID"] = 11;
KsDt["订单数量"] = 10;
Dj.Rows.Add(KsDt);
KsDt = Dj.NewRow();
KsDt["ID"] = 12;
KsDt["订单数量"] = 20;
Dj.Rows.Add(KsDt);
KsDt = Dj.NewRow();
KsDt["ID"] = 11;
KsDt["订单数量"] = 12;
Dj.Rows.Add(KsDt);
KsDt = Dj.NewRow();
KsDt["ID"] = 12;
KsDt["订单数量"] = 16;
Dj.Rows.Add(KsDt);
KsDt = Dj.NewRow();
KsDt["ID"] = 13;
KsDt["订单数量"] = 30;
Dj.Rows.Add(KsDt);
KsDt = Dj.NewRow();
KsDt["ID"] = 14;
KsDt["订单数量"] = 40;
Dj.Rows.Add(KsDt);
KsDt = Dj.NewRow();
KsDt["ID"] = 15;
KsDt["订单数量"] = 1250;
Dj.Rows.Add(KsDt);
ds.Tables.Add(Ks);
ds.Tables.Add(Dj);
//建立两内存表的链接
//没有为 createConstraints 标志指定任何值(默认为 true),它假定 子 表中的所有行都具有一个存在于父表中的主键值。
//如果子列可能包含父列不包含的值,添加 DataRelation 时请将 createConstraints 标志设置为 false。
ds.Relations.Add("左联", Ks.Columns["ID"], Dj.Columns["ID"],false );
//历遍父表所有的行并赋值给parentRow
foreach (DataRow parentRow in ds.Relations["左联"].ParentTable.Rows)
{
//历遍parentRow相关的所有子行并赋值给childRow
foreach (DataRow childRow in parentRow.GetChildRows(ds.Relations["左联"]))
{
Console.WriteLine("父表中的ID:{0} 父表中的客商名称: {1} 子表中的订单数量:{2}",parentRow["ID"],parentRow["客商名称"],childRow["订单数量"]);
}
}
Console.ReadLine();
}
}
}