请教:多个DataTable合并成一个的问题...

时间:2021-11-30 19:40:08
比如有三个DataTable,dt1为学生姓名,语文成绩,dt2为学生姓名,数学成绩,dt3为学生姓名,英语成绩...
其中姓名一列的值完全相同,请问怎样将三个表合并成一个DataTable,使得结果列为:学生姓名,语文成绩,数学成绩,英语成绩? 

15 个解决方案

#1


  谁来帮帮我啊。。。Thks!!

#2


你数据是怎么来的,为何先分开呢,使用一个视图填充到一个DataTable不就完了。

#3


创建一个中间表,把3个表的数据一个个读进去。。。。。。。。

#4


你是从数据库读取数据?如果是从数据库读取的话用多表查询语句填充到一个DataTable就行了...不用那么麻烦

#5


引用 4 楼 my_vs 的回复:
你是从数据库读取数据?如果是从数据库读取的话用多表查询语句填充到一个DataTable就行了...不用那么麻烦


是的,在SQL 中我会写多表查询语句。只是这三个表是在不同数据库里面,在写连接字符串的时候就不知道怎样写了,只能想到这种方法。。。有什么方法可以一次查询出来么?

#6


不同的库?分机么???

机器是否在同一个欲望内,可以建立sql的信任连接。。。

其实这样麻烦,直接程序去读三个库中的三个表 过渡一下好了~

#7


sql: select 英语表.生名,英语表.成绩,语文表.成绩,数学表.成绩 from 英语表 ,语文表,数学表 where 英语表.生名=语文表.生名 and 英语表.生名=数学表.生名 


这应该就是楼主想要的

#8


用linq对DataTable进行连接

#9


yeah..i think linq2datatable is one way:

var query=from t1 in dt1.AsEnumerable()
          join t2 in dt2.AsEnumerable()
          on t1.Field<int>("ID") equals t2.Field<int>("ID")
          select new {ID=t1.Field<int>("ID"),语文成绩=t1.Field<int>("语文成绩"),
数学成绩=t2.Field<int>("数学成绩")}

#10


引用楼主 hiochou 的回复:
比如有三个DataTable,dt1为学生姓名,语文成绩,dt2为学生姓名,数学成绩,dt3为学生姓名,英语成绩...
其中姓名一列的值完全相同,请问怎样将三个表合并成一个DataTable,使得结果列为:学生姓名,语文成绩,数学成绩,英语成绩?

将三个表的关键字都设成“学生姓名”

  table1.merge(talbe2,ture)
 table1.merge(table3,ture)
不就行了?

#11


     开始的想法只是要将三个表放入一个DataGridView中显示出来的,就想到将三个表合成一个。现在想想没必要这么麻烦,用循环直接将各字段的值与那控件列绑定就行了。。呵呵,谢谢各位发表的观点,让我学到了不同的思路。。。


#12


楼主,你应该创建一个视图

#13


   请教:多个DataTable合并成一个的问题... 好啦,谢谢大家的看法!!

#14


datatable dt=new datatable()
Column 姓名=new Column()
Column 语文=new Column()
column 数学=new column()
Column 英语=new Column()
dt.addCoumn(姓名)
dt.addCoumn(语文)
dt.addCoumn(数学)
dt.addCoumn(英语)
Row R1=dt.Createrow()
循环给 r1["姓名"] 赋值
后面同样用循环和新建的表姓名列相同的话,就赋与 成绩分数

#15


pivot

#1


  谁来帮帮我啊。。。Thks!!

#2


你数据是怎么来的,为何先分开呢,使用一个视图填充到一个DataTable不就完了。

#3


创建一个中间表,把3个表的数据一个个读进去。。。。。。。。

#4


你是从数据库读取数据?如果是从数据库读取的话用多表查询语句填充到一个DataTable就行了...不用那么麻烦

#5


引用 4 楼 my_vs 的回复:
你是从数据库读取数据?如果是从数据库读取的话用多表查询语句填充到一个DataTable就行了...不用那么麻烦


是的,在SQL 中我会写多表查询语句。只是这三个表是在不同数据库里面,在写连接字符串的时候就不知道怎样写了,只能想到这种方法。。。有什么方法可以一次查询出来么?

#6


不同的库?分机么???

机器是否在同一个欲望内,可以建立sql的信任连接。。。

其实这样麻烦,直接程序去读三个库中的三个表 过渡一下好了~

#7


sql: select 英语表.生名,英语表.成绩,语文表.成绩,数学表.成绩 from 英语表 ,语文表,数学表 where 英语表.生名=语文表.生名 and 英语表.生名=数学表.生名 


这应该就是楼主想要的

#8


用linq对DataTable进行连接

#9


yeah..i think linq2datatable is one way:

var query=from t1 in dt1.AsEnumerable()
          join t2 in dt2.AsEnumerable()
          on t1.Field<int>("ID") equals t2.Field<int>("ID")
          select new {ID=t1.Field<int>("ID"),语文成绩=t1.Field<int>("语文成绩"),
数学成绩=t2.Field<int>("数学成绩")}

#10


引用楼主 hiochou 的回复:
比如有三个DataTable,dt1为学生姓名,语文成绩,dt2为学生姓名,数学成绩,dt3为学生姓名,英语成绩...
其中姓名一列的值完全相同,请问怎样将三个表合并成一个DataTable,使得结果列为:学生姓名,语文成绩,数学成绩,英语成绩?

将三个表的关键字都设成“学生姓名”

  table1.merge(talbe2,ture)
 table1.merge(table3,ture)
不就行了?

#11


     开始的想法只是要将三个表放入一个DataGridView中显示出来的,就想到将三个表合成一个。现在想想没必要这么麻烦,用循环直接将各字段的值与那控件列绑定就行了。。呵呵,谢谢各位发表的观点,让我学到了不同的思路。。。


#12


楼主,你应该创建一个视图

#13


   请教:多个DataTable合并成一个的问题... 好啦,谢谢大家的看法!!

#14


datatable dt=new datatable()
Column 姓名=new Column()
Column 语文=new Column()
column 数学=new column()
Column 英语=new Column()
dt.addCoumn(姓名)
dt.addCoumn(语文)
dt.addCoumn(数学)
dt.addCoumn(英语)
Row R1=dt.Createrow()
循环给 r1["姓名"] 赋值
后面同样用循环和新建的表姓名列相同的话,就赋与 成绩分数

#15


pivot