C#中如何将好几个 datatable 的信息整合到一个datatable里?或许不是简单的合并!!在线等!!30分悬赏!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中如何将好几个 datatable 的信息整合到一个datatable里?或许不是简单的合并!!在线等!!30分悬赏!相关的知识,希望对你有一定的参考价值。
如图,求解救!
在线等!!!!
或许不是简简单单的Merge就能解决的吧??
注意:有要求,这些表只能建在内存datatable中,不能放在SQL Server数据库里!!!
求详细思路!!!有代码更好!
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,如何将他们数据加到一起?