首页 新闻 会员 周边 捐助

各位大神帮忙看看关于DataTable的数据表反转问题

0
悬赏园豆:100 [已关闭问题] 关闭于 2015-01-07 09:35

如下图:怎么把A表反转成B表?谢谢各位大神!

 

Kueew的主页 Kueew | 初学一级 | 园豆:95
提问于:2015-01-06 10:22
< >
分享
所有回答(4)
0

自己写函数处理每一条DataRow。

Firen | 园豆:5385 (大侠五级) | 2015-01-06 10:24

不好处理啊  想找个简单点的方法   

支持(0) 反对(0) Kueew | 园豆:95 (初学一级) | 2015-01-06 10:25
1

对于连几行代码都不愿意写的人,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;
}
爱编程的大叔 | 园豆:30844 (高人七级) | 2015-01-06 10:41

大神  这个我的需求有点不一样哈 

支持(0) 反对(0) Kueew | 园豆:95 (初学一级) | 2015-01-06 10:49

@qyhack: 可以参考改改哇。

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2015-01-06 10:50

@qyhack: 我明白了,你想站在原地,跺跺脚,然后代码就自动生成了。

或者是想等全世界所有的功能都已经有现成的代码....

请耐心等候,我们正在开发Visual Studio 3050,

到那时候,你还没有开始想要干什么的时候,

Visual Studio 已经开始进行预编译了,等你想到一半的时候,结果已经出来了。

那个啥AMAZON说的你还没有下订单,快递已经在路上那个已经全部OUT掉了。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-01-06 10:54

@爱编程的大叔: 好吧,谢谢您!这个确实有点复杂,我自己技术不到家,想了好几天也没有想出来怎么写,要不然也不会上这里了。

支持(0) 反对(0) Kueew | 园豆:95 (初学一级) | 2015-01-06 10:56

@qyhack: 仔细看了一下你的需求,你说的跟你要的是不同的。

对于这种需求,根本不需要进行数据转换。

在EXCEL中,这个叫数据透视表,你可以自己GOOGLE一下PivotTable或者“数据透视表”

在WINFORM中,有一种控件叫PIVOTCONTROL,只要你给他A中的数据表,

他就可以帮你显示成为B中的样子,完全不需要转换。

在WEB中,自己手写代码也很容易实现,要不然找个数据透视表控件也是分分钟的事。

实在不行,还可以用SQL SERVER的Analysis Service。(不过这个更高端,一般人更加用不来)

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-01-06 11:16

@爱编程的大叔: 谢谢您,这个可能不能通过这些控件来处理,我需要得到最明细的数据,还是需要通过A表算出来,我自己慢慢试着写看看,谢谢!

支持(0) 反对(0) Kueew | 园豆:95 (初学一级) | 2015-01-06 11:39
0

A表直接变B表的可能行不大,因为DataTable是二维的结构,你的B表有合并行和列,已经不是二维的结构了,要达到你的B表效果也可以,要把B表拆分为多个二维的结构,而且还要对你的A表数据进行汇总.

水晶途途 | 园豆:1443 (小虾三级) | 2015-01-06 10:47

嗯 对  这块算起来比较复杂 就是还没有找到对应的解决方法啊

支持(0) 反对(0) Kueew | 园豆:95 (初学一级) | 2015-01-06 10:48
0

会用 Excel 的透视表(钻取报表)功能不?为原表创建透视表,拖两下就出来了。

Launcher | 园豆:45050 (高人七级) | 2015-01-06 10:53

这个还真不会啊

支持(0) 反对(0) Kueew | 园豆:95 (初学一级) | 2015-01-06 10:56

@qyhack: 你直接搜索EXCEL透视表,运气好的话直接有示例。

http://v.youku.com/v_show/id_XNzE3NzM2Mjg=.html?from=y1.2-1-105.3.2-1.1-1-1-1

这是视频教学。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30844 (高人七级) | 2015-01-06 11:27

@爱编程的大叔: 谢谢您,我这个不能使用excel的透视表来做。

支持(0) 反对(0) Kueew | 园豆:95 (初学一级) | 2015-01-06 11:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册