1、使用 DataView 进行关系导航
如果 DataSet 中的表之间存在关系,则可以使用 DataRowView 的 CreateChildView 方法为父表中的行创建一个 DataView,该 DataView 包含来自相关子表的行。
关键代码:
首先要定义关系:
private DataRelation 关系对象;
关系对象=数据集名.Relations.Add("关系名",数据集名.表1名. Columns["关系列名"],数据集名.表2名. Columns["关系列名"]);
其次在DataGrid1_SelectedIndexChanged事件中写以下代码:
BindData(); //数据绑定
DataRow crRow;//声明数据行
int iIdx;
iIdx = DataGrid1.SelectedIndex ;//获得在DataGrid中所选择的行号
crRow = this.数据集名.数据表1名.Rows[iIdx];//获得所选择的行
Label3.Text="";
//通过DataRow的GetChildRows()获得子表中与之关联的所有行;
foreach(DataRow r in crRow.GetChildRows(“关系名”))
{
Label3.Text += r["订单ID"] + ", ";
}
DataView parentTableView = new DataView(数据集名.数据表1名); //父表的数据视图
DataRowView currentRowView = parentTableView[iIdx]; //父表行的数据视图
//通过DataRowView的CreatChildView()方法获得子表的数据表视图
DataGrid2.DataSource = currentRowView.CreateChildView(“关系名”);
DataGrid2.DataBind();
2、导航表间关系
DataRelation 的主要功能之一是允许您在 DataSet 中从一个 DataTable 导航至另一个 DataTable。它使您能够在给定相关 DataTable 中的单个 DataRow 的情况下检索一个 DataTable 中的所有相关 DataRow 对象。例如,当建立客户表和订单表之间的 DataRelation 后,可以使用 DataRow.GetChildRows 检索特定客户行的所有订单行。