用DataRelation给多个DataTable建立关系并显示到TreeView
DataRelation 对象执行两种功能:
它可使与正使用的记录相关的记录可用。如果在父记录 (GetChildRows) 中,则它提供子记录;如果正使用子记录 (GetParentRow),则它提供父记录。
它可强制约束的引用完整性,如删除父记录时删除相关的子记录。
了解真正的联接与 DataRelation 对象功能之间的差异很重要。在真正的联接中,从父表和子表获取记录并将其放入单个的平面记录集。当使用 DataRelation 对象时,不创建新记录集。而关系跟踪表之间的关系并使父记录和子记录保持同步。
public partial class DataRelationDemo : System.Web.UI.Page
{
private SqlConnection conn;
private SqlDataAdapter dad;
private DataSet ds;
protected void Page_Load(object sender, EventArgs e)
{
//连接数据库pubs,且把三张表填充到DataSet里;
this.conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["pubsConnectionString"].ToString());
this.dad = new SqlDataAdapter("select job_id,job_desc from jobs select pub_id,pub_name from publishers select pub_id,job_id,fname,lname from employee", conn);
this.ds=new DataSet();
this.dad.Fill(ds);
//给三张表建立不同的关系;
//通过job_id给employee和jobs建立主外间关系;注意主表(父表)在前,从表(子表)在后,注意参数的顺序
DataRelation relationjob = new DataRelation("empjob", ds.Tables[0].Columns["job_id"], ds.Tables[2].Columns["job_id"]);
//添加到DataSet里的Relations中;
ds.Relations.Add(relationjob);
//通过pub_id给employee和publishers建立主外间关系;注意主表(父表)在前,从表(子表)在后,注意参数的顺序
DataRelation relationpub = new DataRelation("emppub", ds.Tables[1].Columns["pub_id"], ds.Tables[2].Columns["pub_id"]);
//添加到DataSet里的Relations中;
ds.Relations.Add(relationpub);
//循环遍力主表(父表),
foreach (DataRow drpub in ds.Tables[1].Rows) {
//建立父节点
TreeNode nodepart = new TreeNode();
nodepart.Text = drpub["pub_name"].ToString();
this.TreeView1.Nodes.Add(nodepart);//将父节点添加到树控件;
//在循环遍力主表所对应的从表(子表),用GetChildRows(relationpub)得到的是一个DataRow数组;
foreach (DataRow dremp in drpub.GetChildRows(relationpub)) {
//在建立子节点;
TreeNode nodechild = new TreeNode();
nodechild.Text = dremp["fname"].ToString() + " " + dremp["lname"].ToString();
nodepart.ChildNodes.Add(nodechild);//将子节点添加到父节点里;
//通过dremp.GetParentRow(relationjob)这个方法得到从表(子表)所对应的主表(父表),而返回的是一行DataRow数据;
//因此不需要用循环遍历;
DataRow dr=dremp.GetParentRow(relationjob);
////在建立子节点;
TreeNode nodechch = new TreeNode();
nodechch.Text = dr["job_desc"].ToString();
nodechild.ChildNodes.Add(nodechch);//将子节点添加到上以及子节点里;
}
}
}
}
用DataRelation给多个DataTable建立关系并显示到TreeView的更多相关文章
- datatable绑定comboBox显示数据[C#]
实现功能: datatable绑定comboBox,在下拉菜单中显示对应数据 实现方法: 1.生成datatable,并为combox绑定数据源: comboBox1.DataSource = dt1 ...
- jquery datatable ajax配置详解
我写的这个东西类似于个人笔记,如果你想要完整的而了解 可以去这里看看 http://dt.thxopen.com/ 包括英文原网站都不错. 通过配置ajax的属性和服务器交互 $("sele ...
- jquery datatable测试部分代码(仅自用)
创建一个四列的datatable表,第四列为表格里的按钮设置,respond为JSON对象数组. $('#example').DataTable({ //每页显示十条数据 ...
- datatable修改每页默认显示的数量
datatable修改每页默认显示的数量 一.总结 一句话总结: iDisplayLength属性:'iDisplayLength':50 1.datatable默认每页显示50个? iDisplay ...
- ADO.NET编程之美----数据访问方式(面向连接与面向无连接)
最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...
- 022. ASP.NET为DataSet中数据集添加关系及动态创建主子表和添加主子表关系
protected void Page_Load(object sender, EventArgs e) { string connectionString = "server=.;data ...
- ADO.NET - 全面梳理
转自:http://www.cnblogs.com/yangcaogui/archive/2012/06/09/2537086.html 目录: 简单的介绍下ADO.NET SqlConnection ...
- 简述ADO.NET命名空间
system.data命名空间的类型 system.data命名空间的核心成员 命名空间 作用 Constraint 表示某个DataColumn对象的约束 DataColumn 表示某个DataT ...
- ADO.NET梳理
目录: 简单的介绍下ADO.NET SqlConnection(连接对象) SqlCommand(命令对象) SqlParameter(Sql参数) SqlDataReader(数据流读取器) Sql ...
随机推荐
- C# Sap Rfc 连接代码实例
根据不同的需求,安装不同位数的 Rfc SDK 1.构造 Sap Adress Information,且继承 IDestinationConfiguration public class SapAd ...
- 多线程编程学习笔记——编写一个异步的HTTP服务器和客户端
接上文 多线程编程学习笔记——使用异步IO 二. 编写一个异步的HTTP服务器和客户端 本节展示了如何编写一个简单的异步HTTP服务器. 1.程序代码如下. using System; using ...
- ABP官方文档翻译 4.2 数据传输对象
数据传输对象 DTOs的必要性 领域层的抽象 数据隐藏 序列化和懒加载问题 DTO转换和验证 示例 DTOs和实体间的自动映射 辅助接口和类 数据传输对象用来在应用层和展示层之间传输数据. 展示层调用 ...
- GreenDao 兼容升级,保留旧数据的---全方面解决方案
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- vue中钩子函数的用法
这么多钩子函数,我们怎么用呢,我想大家可能有这样的疑问吧,我也有,哈哈哈. beforecreate : 举个栗子:可以在这加个loading事件 created :在这结束loading,还做一些初 ...
- OI黑科技:读入优化
利用getchar()函数加速读入. Q:读入优化是什么? A :更加快速地读入一些较大的数字. Q:scanf不是已经够快了吗? A:Naive,scanf还是不!够!快! Q:那怎么办呢? A:我 ...
- BZOJ 3569: DZY Loves Chinese II [高斯消元XOR 神题]
http://www.lydsy.com/JudgeOnline/problem.php?id=3569 题意:多次询问一个无向连通图当图中某k条边消失时这个图是否联通 强制在线 太神啦啦啦啦啦啦啦啦 ...
- 【非原创】C++类成员函数的重载、覆盖和隐藏
链接:https://www.nowcoder.com/questionTerminal/266d3a6d4f1b436aabf1eff3156fed95来源:牛客网 题目:类成员函数的重载.覆盖和隐 ...
- 一、scrapy的下载安装---Windows(安装软件太让我伤心了)
写博客就和笔记一样真的很有用,你可以随时的翻阅.爬虫的爬虫原理与数据抓取.非结构化与结构化数据提取.动态HTML处理和简单的图像识别已经学完,就差整理博客了 开始学习scrapy了,所以重新建了个分类 ...
- Vue站点的搭建之旅
背景 很久没写博客了,这次博客分享一下最近上班空闲时间做的两个业余Demo.分别是V电影App的移动端站点[一直很喜欢用这个APP可是他们没有出对应的mobile端,所以自己开发一个, ...