问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-27 17:27

我来回答

1个回答

热心网友 时间:2022-04-27 18:56

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

using System;
using System.Data;
namespace BaseClassLibrary
{
/**//// <summary>
/// 基础类
/// </summary>
public class DataSetOperate
{
/**//// <summary>
/// 对DataSet进行处理,建立DataTable表间的关系,向DataTable中增加列
/// </summary>
public DataSetOperate()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/**//// <summary>
/// 建立DataTable表间的关系
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
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]);
}
/**//// <summary>
/// 先建立DataSet间关系,在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="primaryColumnName">主键列名称</param>
/// <param name="foreignColumnName">外键列名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
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];
}
}
/**//// <summary>
/// 在向外建表DataTabe中增加列
/// </summary>
/// <param name="ds">需要建立关系的DataSet</param>
/// <param name="primaryTableName">主键表名称</param>
/// <param name="foreignTableName">外键表名称</param>
/// <param name="addColumnName">主键表中列名称</param>
/// <param name="newColumnName">外键表中新增列名称</param>
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];
}
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 安徽农金易贷款还清了还能继续审请能在柜台上直接审请可以吗? 安徽农金夫妻男已贷款,女可以贷款吗? 安徽农金转换利率没有提示次贷确认,需要次贷同意吗? 安徽农金贷款6万取了2万.可以再贷里面的钱去还前面贷款的钱吗? 求一款手机亮屏自动录制屏幕的软件 凛冬将至是什么梗 凛冬将至是成语吗 凛冬将至完整语句有哪些? 凛冬将至的翻译是:什么意思 史塔克家的族徽和‘’凛冬将至‘’英文怎麽说 如何理解 “winter is coming”这句话 leave one wolf alive and sheep are never safe.winter is coming是很什么意思 凛冬将至的英文翻译 赛罗奥特曼眼镜玩具和赛迦手镯哪个比较好玩? 赛罗奥特曼水晶公仔怎么样买到 哪有买赛罗奥特曼玩偶的? C# 如何把一个datatable某行数据赋值给另一datatable 知道密码忘记了,又没有绑定QQ号和手机怎么办? 没有手机号跟qq怎么申请 我没有绑定手机号,QQ号,邮箱,密码忘记了怎么找回- 问一问 如何把一个DataTable作为另一个DataTable一行 掌上生活查询寄送进度信用卡XD82899955831寄出到哪了? 我想查查信用卡到哪了呀查啊姐姐 这是我办理的招商信用卡,我朋友的信用卡在掌上生活查询是卡已在寄送中可以查卡片具体的到达位置,我的卡 怎么查询信用卡购买了些什么。 下了掌上生活。招行的 招行信用卡,掌上生活显示查不到信用卡数据是怎么回事??? 苹果手机有息屏显示嘛 网易我的世界打不开出现这些代码是怎么回事 我的世界网易打不开? 安卓有边录像边拍照的软件吗。?? 林志玲秘密开刀动手术,这是为了拼事业却丢了健康吗? 公司需要申请发明专利,想找一家靠谱的代理公司? 选择专利申请公司要注意什么 dataset中把一个datatable中的数据复制到另一datatable,代码如下,但最后就不显示数据,大哥们帮帮忙! 怎么把原有的DataTable中的前三条记录放到另外一个DataTable中(有没有方便的办法) - 信息提示 TAL数字货币上了哪几个交易所? tal是什么意思? 为什么芬兰货币单位是马克(现在是欧元)?北欧其他国家都是克朗的... 饭圈tal是什么意思