博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# DataTable和DataRelation
阅读量:4701 次
发布时间:2019-06-09

本文共 5954 字,大约阅读时间需要 19 分钟。

form2.cs

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace DataAdapter{    public partial class Form2 : Form    {        private DataSet ds = new DataSet();        public Form2()        {            InitializeComponent();        }        private void Form2_Load(object sender, EventArgs e)        {            MakeParentTable();            MakeChildTable();            MakeDataRelation();            BindToDataGrid();        }        ///         /// 创建父表        ///         private void MakeParentTable()        {            //实例化一个表的对象,并命名为ParentTable            DataTable table = new DataTable("ParentTable");            //声明列和行的对象            DataColumn column;            DataRow row;            //创建新的列,上面是声明,下面才是实例化            column = new DataColumn();            //列的数据类型            column.DataType = System.Type.GetType("System.Int32");            //列的名称            column.ColumnName = "id";            //列的读写方式--只读            column.ReadOnly = true;            //指定列的内容受唯一限制(内容不能重复)            column.Unique = true;            //将设置好的列对象添加到DataTable中            table.Columns.Add(column);            //继续创建列            column = new DataColumn();            column.DataType = System.Type.GetType("System.String");            column.ColumnName = "ParentItem";            //是否自增            column.AutoIncrement = false;            //设置列标题            column.Caption = "ParentItem";            column.ReadOnly = false;            column.Unique = false;            table.Columns.Add(column);            ////为表设置主键字段,首先选出要作为主键的字段添加到一个DataColumn集合中            ////这也侧面说明DataTable里面也可以有多个主键字段            DataColumn[] PrimaryKeyColumns = new DataColumn[1];            PrimaryKeyColumns[0] = table.Columns["id"];            table.PrimaryKey = PrimaryKeyColumns;            //上面已经把一个表构造弄好了,或者说一张表已经准备好了            //接下来就是实例化DataSet对象            ds.Tables.Add(table);            //现在ds中有一张ParentTable表,这长表有两个列,但是还是没有数据行            //下面就来添加三行数据            //行的实例化不能用new DataRow();因为是使用table的构架来实例一个新行            row = table.NewRow();            row["id"] = 1;            row["ParentItem"] = "父表的第1行数据";            //添加到表中去            table.Rows.Add(row);            row = table.NewRow();            row["id"] = 2;            row["ParentItem"] = "父表的第2行数据";            //添加到表中去            table.Rows.Add(row);            row = table.NewRow();            row["id"] = 3;            row["ParentItem"] = "父表的第3行数据";            //添加到表中去            table.Rows.Add(row);        }        private void MakeChildTable()        {            //实例化一个表的对象,并命名为ChildTable            DataTable table = new DataTable("ChildTable");            //声明列和行的对象            DataColumn column;            DataRow row;            //创建新的列,上面是声明,下面才是实例化            column = new DataColumn();            //列的数据类型            column.DataType = System.Type.GetType("System.Int32");            //列的名称            column.ColumnName = "ChildID";            column.Caption = "ID";            //列的读写方式--只读            column.AutoIncrement = true;            column.ReadOnly = true;            //指定列的内容受唯一限制(内容不能重复)            column.Unique = true;            //将设置好的列对象添加到DataTable中            table.Columns.Add(column);            //继续创建列            column = new DataColumn();            column.DataType = System.Type.GetType("System.String");            column.ColumnName = "ChildItem";            //是否自增            column.AutoIncrement = false;            //设置列标题            column.Caption = "ChildItem";            column.ReadOnly = false;            column.Unique = false;            table.Columns.Add(column);            //继续创建列            column = new DataColumn();            column.DataType = System.Type.GetType("System.Int32");            column.ColumnName = "ParentID";            //是否自增            column.AutoIncrement = false;            //设置列标题            column.Caption = "ParentID";            column.ReadOnly = false;            column.Unique = false;            table.Columns.Add(column);            //上面已经把一个表构造弄好了,或者说一张表已经准备好了            //接下来就是实例化DataSet对象            //ds = new DataSet();            ds.Tables.Add(table);            //为表创建15个行数据,注意ParentID列的值,正好对应父表中的三行            for (int j = 1; j < 4; j++)            {                for (int i = 0; i < 5; i++)                {                    row = table.NewRow();                    row["ChildID"] = i+5*j;                    row["ChildItem"] = "第" + i + "项";                    //这是外键行,这个需要参考你的父表中的值,不能错了                    row["ParentID"] = j;                    table.Rows.Add(row);                }            }        }        private void MakeDataRelation()        {            //为上面创建的两张表之间建立关系            //得到父表中要用于关系的列            DataColumn parentColumn = ds.Tables["ParentTable"].Columns["id"];            //得到子表中要用于关系的列            DataColumn childColumn = ds.Tables["ChildTable"].Columns["ParentID"];            //新建关系,括号中的参数分别是(约束名,父表字段,子表字段)            DataRelation relation = new DataRelation("parent2child", parentColumn, childColumn);            //将约束关系添加到子表ChildTable中            ds.Tables["ChildTable"].ParentRelations.Add(relation);        }        private void BindToDataGrid()        {            //在界面上放了一个dataGridView控件            dataGridView1.DataSource = ds.Tables["ParentTable"];            dataGridView2.DataSource = ds.Tables["ChildTable"];        }        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)        {            string pid = dataGridView1.CurrentRow.Cells[0].Value.ToString();            if (pid != "")            {                DataView dv = ds.Tables["ChildTable"].DefaultView;                //设置搜索条件                dv.RowFilter = "ParentID = " + pid;                //指定数据源                dataGridView2.DataSource = dv;            }        }    }}

转载于:https://www.cnblogs.com/Mysterious/p/3423232.html

你可能感兴趣的文章
定时任务 - quartz
查看>>
【高斯消元】【图论】[Wc2011][HYSBZ/BZOJ2155]Xor
查看>>
NodeJS无所不能:细数10个令人惊讶的NodeJS开源项目
查看>>
redmine 一键安装
查看>>
021-异步注册登录(检测用户名)
查看>>
gitlab、github账户密码修改后,记得修改本地账户的git凭据
查看>>
2019年春季学期第二周作业
查看>>
深入浅出 Java 中的包装类
查看>>
SQL点点滴滴_修改数据库的兼容级别
查看>>
赋予ANDROID模拟器root权限2.2
查看>>
requests:json请求中中文乱码处理
查看>>
Error:“const char*”类型的实参与“wchar_t”类型的形参不兼容
查看>>
C# 时间格式转换
查看>>
iOS百度地图SDK集成详细步骤
查看>>
linux下cetos7无线网络设置办法
查看>>
7.24 面向对象
查看>>
C++ primer 第七章之 类的静态成员
查看>>
mac Xvim 语法高亮
查看>>
解决PHP生成校验码时“图像因其本身有错无法显示”的错误
查看>>
Android中的文件存储
查看>>