如下图:怎么把A表反转成B表?谢谢各位大神!
自己写函数处理每一条DataRow。
不好处理啊 想找个简单点的方法
对于连几行代码都不愿意写的人,CodeProject上都写好了,
Transpose a DataTable using C#
Actual Table
Status | Phase I | Phase II | Phase III |
Not Started | 100 | 200 | 300 |
Partially Completed | 101 | 201 | 301 |
Successfully Completed | 102 | 202 | 302 |
Blocked | 103 | 203 | 303 |
Completed with Conditions | 104 | 204 | 304 |
Cannot proceed | 105 | 205 | 305 |
Transposed Table
Status | Not Started | Partially Completed | Successfully Completed | Blocked | Completed with Conditions | Cannot proceed |
Phase I | 100 | 101 | 102 | 103 | 104 | 105 |
Phase II | 200 | 201 | 202 | 203 | 204 | 205 |
Phase III | 300 | 301 | 302 | 303 | 304 | 305 |
private DataTable GenerateTransposedTable(DataTable inputTable) { DataTable outputTable = new DataTable(); // Add columns by looping rows // Header row's first column is same as in inputTable outputTable.Columns.Add(inputTable.Columns[0].ColumnName.ToString()); // Header row's second column onwards, 'inputTable's first column taken foreach (DataRow inRow in inputTable.Rows) { string newColName = inRow[0].ToString(); outputTable.Columns.Add(newColName); } // Add rows by looping columns for (int rCount = 1; rCount <= inputTable.Columns.Count - 1; rCount++) { DataRow newRow = outputTable.NewRow(); // First column is inputTable's Header row's second column newRow[0] = inputTable.Columns[rCount].ColumnName.ToString(); for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++) { string colValue = inputTable.Rows[cCount][rCount].ToString(); newRow[cCount + 1] = colValue; } outputTable.Rows.Add(newRow); } return outputTable; }
大神 这个我的需求有点不一样哈
@qyhack: 可以参考改改哇。
@qyhack: 我明白了,你想站在原地,跺跺脚,然后代码就自动生成了。
或者是想等全世界所有的功能都已经有现成的代码....
请耐心等候,我们正在开发Visual Studio 3050,
到那时候,你还没有开始想要干什么的时候,
Visual Studio 已经开始进行预编译了,等你想到一半的时候,结果已经出来了。
那个啥AMAZON说的你还没有下订单,快递已经在路上那个已经全部OUT掉了。
@爱编程的大叔: 好吧,谢谢您!这个确实有点复杂,我自己技术不到家,想了好几天也没有想出来怎么写,要不然也不会上这里了。
@qyhack: 仔细看了一下你的需求,你说的跟你要的是不同的。
对于这种需求,根本不需要进行数据转换。
在EXCEL中,这个叫数据透视表,你可以自己GOOGLE一下PivotTable或者“数据透视表”
在WINFORM中,有一种控件叫PIVOTCONTROL,只要你给他A中的数据表,
他就可以帮你显示成为B中的样子,完全不需要转换。
在WEB中,自己手写代码也很容易实现,要不然找个数据透视表控件也是分分钟的事。
实在不行,还可以用SQL SERVER的Analysis Service。(不过这个更高端,一般人更加用不来)
@爱编程的大叔: 谢谢您,这个可能不能通过这些控件来处理,我需要得到最明细的数据,还是需要通过A表算出来,我自己慢慢试着写看看,谢谢!
A表直接变B表的可能行不大,因为DataTable是二维的结构,你的B表有合并行和列,已经不是二维的结构了,要达到你的B表效果也可以,要把B表拆分为多个二维的结构,而且还要对你的A表数据进行汇总.
嗯 对 这块算起来比较复杂 就是还没有找到对应的解决方法啊
会用 Excel 的透视表(钻取报表)功能不?为原表创建透视表,拖两下就出来了。
这个还真不会啊
@qyhack: 你直接搜索EXCEL透视表,运气好的话直接有示例。
http://v.youku.com/v_show/id_XNzE3NzM2Mjg=.html?from=y1.2-1-105.3.2-1.1-1-1-1
这是视频教学。
@爱编程的大叔: 谢谢您,我这个不能使用excel的透视表来做。