如何把一个DataTable中的某列通过表关系加到另外一个DataTable中

2024-11-16 00:55:39
推荐回答(1个)
回答1:

  在DataSet中是无法使用Select语句从多个表中自由选择字段组成新的视图的,只能利用DataTable间的关系把一个DataTable中的某列增加到另外一个DataTable中。
  原理:
  1.在DataTable间建立关系
  2.把一个DataTable中的某列增加到另外一个DataTable中
  3.如果DataTable不再同一个DataSet中需要合并DataSet
  实现代码如下:

using System;
using System.Data;
namespace BaseClassLibrary
{
/**////


/// 基础类
///

public class DataSetOperate
{
/**////
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
///

public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**////
/// 建立DataTable表间的关系
///

/// 需要建立关系的DataSet
/// 主键表名称
/// 外键表名称
/// 主键列名称
/// 外键列名称
public void newRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
}
/**////
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
///

/// 需要建立关系的DataSet
/// 主键表名称
/// 外键表名称
/// 主键列名称
/// 外键列名称
/// 主键表中列名称
/// 外键表中新增列名称
public void addColumnWithRelation(DataSet ds,string primaryTableName,string foreignTableName,string primaryColumnName,string foreignColumnName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
ds.Relations.Add(primaryTableName + foreignTableName,primaryTable.Columns[primaryColumnName],foreignTable.Columns[foreignColumnName]);
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
/**////
/// 在向外建表DataTabe中增加列
///

/// 需要建立关系的DataSet
/// 主键表名称
/// 外键表名称
/// 主键表中列名称
/// 外键表中新增列名称
public void addColumn(DataSet ds,string primaryTableName,string foreignTableName,string addColumnName,string newColumnName)
{
DataTable primaryTable = ds.Tables[primaryTableName];
DataTable foreignTable = ds.Tables[foreignTableName];
DataColumn newColumn = new DataColumn(newColumnName,ds.Tables[primaryTableName].Columns[addColumnName].DataType);
ds.Tables[foreignTableName].Columns.Add(newColumn);
int rowCount = ds.Tables[foreignTableName].Rows.Count;
for(int i = 0;i < rowCount;i++)
{
DataRow parentCustomerDR = foreignTable.Rows[i].GetParentRow(primaryTableName + foreignTableName);
foreignTable.Rows[i][newColumnName] = parentCustomerDR[addColumnName];
}
}
}
}