zoukankan      html  css  js  c++  java
  • C# DataTable和DataRelation

    C# DataTable和DataRelation

    1

    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();
    
            }
    
            /// <summary>
            /// 创建父表
            /// </summary>
            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;
    
                }
            }
        }
    }
  • 相关阅读:
    Java实现各种内部排序算法
    Java实现堆排序(大根堆)
    Java对象的序列化和反序列化
    Java实现链式存储的二叉查找树(递归方法)
    337. House Robber III(包含I和II)
    318. Maximum Product of Word Lengths
    114. Flatten Binary Tree to Linked List
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    96. Unique Binary Search Trees(I 和 II)
  • 原文地址:https://www.cnblogs.com/wfy680/p/12084407.html
Copyright © 2011-2022 走看看