ADO.NET_第五篇_DataTable_07Relations
来源:互联网 发布:光纤有网络连不上 编辑:程序博客网 时间:2024/04/29 23:31
+++ 本例演示如何使用DataTable的DataRelation
private System.Data.DataSet dataSet=new DataSet();
private void MakeDataTables()
{
MakeParentTable();
MakeChildTable();
MakeDataRelation();
BindToDataGrid();
}
#region 创建父表
private void MakeParentTable()
{
System.Data.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;
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[] PrimaryKeyColumns = new DataColumn[1];
PrimaryKeyColumns[0] = table.Columns["id"];
table.PrimaryKey = PrimaryKeyColumns;
dataSet.Tables.Add(table);
for (int i = 0; i <= 2; i++)
{
row = table.NewRow();
row["id"] = i;
row["ParentItem"] = "ParentItem_" + i;
table.Rows.Add(row);
}
Response.Write("ID 父项");
foreach (DataRow dr in table.Rows)
{
Response.Write(dr["id"].ToString() + " " + dr["ParentItem"].ToString() + "</br>");
}
}
#endregion
#region 创建子表
private void MakeChildTable()
{
DataTable table = new DataTable("childTable");
DataColumn column;
DataRow row;
// 创建列并添加到表
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "ChildID";
column.AutoIncrement = true;
column.Caption = "ID";
column.ReadOnly = true;
column.Unique = true;
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.Tables.Add(table);
// Create three sets of DataRow objects,
// five rows each, and add to DataTable.
for (int i = 0; i <= 4; i++)
{
row = table.NewRow();
row["childID"] = i;
row["ChildItem"] = "Item " + i;
row["ParentID"] = 0;
table.Rows.Add(row);
}
for (int i = 0; i <= 4; i++)
{
row = table.NewRow();
row["childID"] = i + 5;
row["ChildItem"] = "Item " + i;
row["ParentID"] = 1;
table.Rows.Add(row);
}
for (int i = 0; i <= 4; i++)
{
row = table.NewRow();
row["childID"] = i + 10;
row["ChildItem"] = "Item " + i;
row["ParentID"] = 2;
table.Rows.Add(row);
}
Response.Write("子ID 子项 父项");
foreach (DataRow dr in table.Rows)
{
Response.Write(dr["childID"].ToString() + " " + dr["ChildItem"].ToString() + " " + dr["ParentID"].ToString() + "</br>");
}
}
#endregion
#region 创建关系
private void MakeDataRelation()
{
// DataRelation方法要求父表和子表的DataColumn和一个名字
DataColumn parentColumn = dataSet.Tables["ParentTable"].Columns["id"];
DataColumn childColumn = dataSet.Tables["ChildTable"].Columns["ParentID"];
DataRelation relation = new DataRelation("parent2Child", parentColumn, childColumn);
dataSet.Tables["ChildTable"].ParentRelations.Add(relation);
}
#endregion
private void BindToDataGrid()
{
GridView1.DataSource = dataSet;
GridView1.DataBind();
//dataGrid1.SetDataBinding(dataSet, "ParentTable");
}
protected void Page_Load(object sender, EventArgs e)
{
MakeDataTables();
}
+++ 说明
1) 首先创建一个全局的DataSet变量,MakeParentTable()方法创建父表,MakeChildTable()方法创建子表,MakeDataRelation()方法创建父子表之间的关系(主外键关系),将父子表和关系都放到DataSet中,最后用BindToDataGrid()方法绑定到控件上。
- ADO.NET_第五篇_DataTable_07Relations
- ADO.NET_第五篇_DataTable_01
- ADO.NET_第五篇_DataTable_04Merge
- ADO.NET_第五篇_DataTable_05Select
- ADO.NET_第五篇_DataTable_06Compute
- ADO.NET_第五篇_DataTable_08DataView
- ADO.NET_第五篇_DataTable_09DataViewRowState
- ADO.NET_第五篇_DataTable_03Copy/Clone
- ADO.NET_第四篇_OracleDataReader
- ADO.NET_第六篇_DataSet
- ADO.NET_第七篇_OracleCommand_01ExecuteNonQuery
- ADO.NET_第七篇_OracleCommand_02ExecuteReader
- ADO.NET_第七篇_OracleCommand_03ExecuteScalar
- ADO.NET_第七篇_OracleCommand_04DataSet
- ADO.NET_第九篇_OracleHelper
- ADO.NET_第二篇_OracleConnection/OracleCommand
- ADO.NET_第十篇_Using关键字
- ADO.NET_介绍
- 嵌入式 linux 智能设备应用中 web 支持的实现(二)
- ADO.NET_第五篇_DataTable_05Select
- pplication Fundamentals——应用程序基础知识
- ADO.NET_第五篇_DataTable_06Compute
- 转:优秀程序员的45个习惯
- ADO.NET_第五篇_DataTable_07Relations
- ADO.NET_第五篇_DataTable_08DataView
- C++string类常用函数
- 大家好
- test
- ADO.NET_第五篇_DataTable_09DataViewRowState
- blog搬了
- ADO.NET_第六篇_DataSet
- 如何解决VC中的警告warning C4251 needs to have dll-interface