关于DataSet中Relations的应用

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

 

namespace connect

{

class Program

{

static void Main(string[] args)

{

//建立数据集对象,像数据库一样

DataSet ds=new DataSet() ;

 

//建立表

DataTable dtsb = new DataTable("SB");

DataTable dtsx = new DataTable("SX");

 

//SB主表,创建列

dtsb.Columns.Add(new DataColumn("学号"));

dtsb.Columns.Add(new DataColumn("姓名"));

dtsb.Columns.Add(new DataColumn("性别"));

dtsb.Columns.Add(new DataColumn("总成绩"));

 

//SX从表,创建列

dtsx.Columns.Add(new DataColumn("学号"));

dtsx.Columns.Add(new DataColumn("姓名"));

dtsx.Columns.Add(new DataColumn("科目"));

dtsx.Columns.Add(new DataColumn("分成绩"));

 

//主表数据,创建行

dtsb.Rows.Add("1","陈一","男","100");

dtsb.Rows.Add("2", "王二", "女", "90");

dtsb.Rows.Add("3", "李三", "女", "80");

dtsb.Rows.Add("4", "赵四", "男", "70");

 

//从表数据,创建行

dtsx.Rows.Add("1", "陈一", "语文", "50");

dtsx.Rows.Add("1", "陈一", "数学", "50");

dtsx.Rows.Add("2", "王二", "数学", "90");

dtsx.Rows.Add("3", "李三", "历史", "50");

dtsx.Rows.Add("3", "李三", "地理", "30");

dtsx.Rows.Add("4", "赵四", "英文", "70");

 

//输出主表明细

Console.WriteLine("我是SB");

Console.WriteLine("学号 姓名 性别 总成绩");

foreach (DataRow a in dtsb.Rows)

{

Console.WriteLine("{0} {1} {2} {3}", a[0].ToString().PadRight (4,' '),a[1],a[2].ToString().PadRight (4,' '),a[3]);

}

 

Console.WriteLine("");

 

//输出从表明细

Console.WriteLine("我是SX");

Console.WriteLine("学号 姓名 科目 分成绩");

foreach (DataRow a in dtsx.Rows)

{

Console.WriteLine("{0} {1} {2} {3}", a[0].ToString().PadRight (4, ' '), a[1], a[2].ToString().PadRight(4, ' '), a[3]);

}

 

Console.WriteLine("");

 

//把表添加到dataset

ds.Tables.Add(dtsb);

ds.Tables.Add(dtsx);

 

//创建关系,以学号为主键

ds.Relations.Add("SBX", ds.Tables["SB"].Columns["学号"], ds.Tables["SX"].Columns["学号"]);

 

//历遍主表所有行,将其赋值给drsb

foreach (DataRow drsb in ds.Relations["SBX"].ParentTable.Rows)

{

Console.WriteLine("{0} {1} {2} {3}", drsb[0], drsb[1], drsb[2], drsb[3]);

 

//历遍drsb所有子行,将其赋值给drsx

foreach (DataRow drsx in drsb.GetChildRows("SBX"))

{

Console.WriteLine(" {0} {1} {2} {3}",drsx[0],drsx[1],drsx[2],drsx[3]);

}

}

 

}

}

}

 

原文地址:https://www.cnblogs.com/disneyland/p/4133369.html