C#中如何将好几个 datatable 的信息整合到一个datatable里?或许不是简单的合并!!在线等!!30分悬赏!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中如何将好几个 datatable 的信息整合到一个datatable里?或许不是简单的合并!!在线等!!30分悬赏!相关的知识,希望对你有一定的参考价值。

如图,求解救!
在线等!!!!

或许不是简简单单的Merge就能解决的吧??
注意:有要求,这些表只能建在内存datatable中,不能放在SQL Server数据库里!!!
求详细思路!!!有代码更好!

参考技术A class Program

static void Main(string[] args)
//建立课程内存表
DataTable table1 = new DataTable();
table1.Columns.Add("CourseCode", Type.GetType("System.String"));
table1.Columns.Add("CourseName", Type.GetType("System.String"));
table1.Rows.Add(new object[2] "A", "语文" );
table1.Rows.Add(new object[2] "B", "数学" );
table1.Rows.Add(new object[2] "C", "英语" );
ShowTable(table1);
//建立学生内存表
DataTable table2 = new DataTable();
table2.Columns.Add("StudentCode", Type.GetType("System.String"));
table2.Columns.Add("StudentName", Type.GetType("System.String"));
table2.Rows.Add(new object[2]"1","张三");
table2.Rows.Add(new object[2] "2", "李四" );
table2.Rows.Add(new object[2] "3", "王五" );
ShowTable(table2);
//建立学生成绩表
DataTable table4 = new DataTable();
table4.Columns.Add("StudentCode", Type.GetType("System.String"));
table4.Columns.Add("CourseCode", Type.GetType("System.String"));
table4.Columns.Add("Grade", Type.GetType("System.Int32"));
table4.Rows.Add(new object[3] "1", "A", 78 );
table4.Rows.Add(new object[3] "1", "B", 90 );
table4.Rows.Add(new object[3] "1", "C", 67 );
table4.Rows.Add(new object[3] "2", "B", 78 );
table4.Rows.Add(new object[3] "2", "C", 90 );
table4.Rows.Add(new object[3] "3", "A", 88 );
table4.Rows.Add(new object[3] "3", "C", 67 );
ShowTable(table4);
//最终统计表
DataTable table5 = new DataTable();
DataColumn col = table5.Columns.Add("StudentCode", Type.GetType("System.String"));
table5.Columns.Add("StudentName", Type.GetType("System.String"));
foreach (DataRow r in table1.Rows)

table5.Columns.Add(r["CourseCode"].ToString(), Type.GetType("System.Int32"));

table5.PrimaryKey =new DataColumn[1]table5.Columns[0];
table2.PrimaryKey = new DataColumn[1] table2.Columns[0] ;
foreach (DataRow row in table4.Rows)

DataRow dRow = table5.Rows.Find(row["StudentCode"]);
if (dRow == null)

dRow = table5.NewRow();
dRow["StudentCode"] = row["StudentCode"];
DataRow fRow = table2.Rows.Find(row["StudentCode"]);
dRow["StudentName"] = (fRow != null) ? fRow["StudentName"] : null;
table5.Rows.Add(dRow);

dRow[row["CourseCode"].ToString()] = row["Grade"];
table5.AcceptChanges();

ShowTable(table5);
Console.ReadLine();

static void ShowTable(DataTable table)

Console.WriteLine(table.TableName);
Console.Write("\t");
foreach (DataColumn col in table.Columns)

Console.Write(string.Format("0,", col.ColumnName));

Console.WriteLine();
foreach (DataRow row in table.Rows)

Console.Write("\t");
foreach (DataColumn col in table.Columns)

Console.Write(string.Format("0,", row[col.ColumnName]));

Console.WriteLine();




//运行结果

CourseCode,CourseName,
A,语文,
B,数学,
C,英语,
StudentCode,StudentName,
1,张三,
2,李四,
3,王五,
StudentCode,CourseCode,Grade,
1,A,78,
1,B,90,
1,C,67,
2,B,78,
2,C,90,
3,A,88,
3,C,67,
StudentCode,StudentName,A,B,C,
1,张三,78,90,67,
2,李四,,78,90,
3,王五,88,,67,本回答被提问者采纳
参考技术B 你直接查出数据库几张表数据存在 一个DataTable不就ok了吗

C# 如何撰写将一个Datatable的所有奇数行提取出来生成一个表,所有偶数行提取出来生成一个表?

可以试一下DataView, 用DataView.RowFilter做筛选,然后用DataView.ToTable()直接生成Table。我没时间做试验了,你可以试一下。

另外,如果只是想得到奇数行和偶数行的集合,用LINQ更方便:
var oddRows = table.Rows.Cast<DataRow>().Where((row, index) => index % 2 == 0).ToArray();
var evenRows = table.Rows.Cast<DataRow>().Where((row, index) => index % 2 == 1).ToArray();
但要生成Table会稍微麻烦点:
之后再建两个DataTable, 再分别Import两个List中的Row(用foreach或for循环都行)。
如果用值字段来区分奇偶行,调整一下LINQ中的Where条件就行。
参考技术A Datatable还有DataSet都是只读的,不能动态添加数据,你还是把数据筛选出来保存到两个List<class>在使用吧 参考技术B 最好做成视图的形式更现实些! 参考技术C for循环

以上是关于C#中如何将好几个 datatable 的信息整合到一个datatable里?或许不是简单的合并!!在线等!!30分悬赏!的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET C# 如何合并DataTable中的重复数据(做数据整合)

c#中两个列名相同的datatable,如何将他们数据加到一起?

C#中foreach语句的作用?

C# 问题:如何将在 DataGridView 中所做的更改保存回使用的 DataTable?

C# datatable 筛选,累加。

c# 如何将多个单行多列的datatable合并成一个单行多列的datatable,表中内容是string..