将DataSet 纵向显示数据

前日经理交付我一任务,将如下表格转换成纵向显示:

id  name  age
1    张三   18
2    李四   20

转换成:

id    1    2
name    张三   李四
age     18     20

冥思苦想,终得正果,代码如下:

View Code
 1  public DataSet RowConvertColumn(DataSet dataSet)
2 {
3 DataTable dataTable = dataSet.Tables[0];
4 DataSet resultDs = new DataSet();
5 DataTable resultDt = new DataTable();
6 //建列
7 DataColumn resultDc1 = new DataColumn();
8 resultDc1.ColumnName = dataTable.Columns[0].ColumnName;
9 resultDt.Columns.Add(resultDc1);
10 foreach (DataRow item in dataTable.Rows)
11 {
12 DataColumn resultDc2 = new DataColumn();
13 resultDc2.ColumnName = item[0].ToString();
14 resultDt.Columns.Add(resultDc2);
15 }
16 //建行
17 for (int k = 1; k < dataTable.Columns.Count; k++)
18 {
19 DataRow resultDr = resultDt.NewRow();
20 for (int i = 0; i < resultDt.Columns.Count; i++)
21 {
22 if (i == 0)
23 {
24 resultDr[i] = dataTable.Columns[k].ColumnName;
25 }
26 else
27 {
28 resultDr[i] = dataTable.Rows[i - 1][k].ToString();
29 }
30 }
31 resultDt.Rows.Add(resultDr);
32 }
33 resultDs.Tables.Add(resultDt);
34
35 return resultDs;
36 }

后又觉得的美中不足:不能自定义列名,重载一下,增加一个字符串数组 参数来保存列名

View Code
 1 //把行转换成列,提供一个列名数组
2 public DataSet RowConvertColumn(DataSet dataSet, string[] columns)
3 {
4 //验证数组长度与dataSet列数是否相等
5 if (dataSet.Tables[0].Columns.Count != columns.Length)
6 {
7 return null;
8 }
9 DataTable dataTable = dataSet.Tables[0];
10 DataSet resultDs = new DataSet();
11 DataTable resultDt = new DataTable();
12 //建列
13 DataColumn resultDc1 = new DataColumn();
14 resultDc1.ColumnName = columns[0];
15 resultDt.Columns.Add(resultDc1);
16 foreach (DataRow item in dataTable.Rows)
17 {
18 DataColumn resultDc2 = new DataColumn();
19 resultDc2.ColumnName = item[0].ToString();
20 resultDt.Columns.Add(resultDc2);
21 }
22 //建行
23 for (int k = 1; k < dataTable.Columns.Count; k++)
24 {
25 DataRow resultDr = resultDt.NewRow();
26 for (int i = 0; i < resultDt.Columns.Count; i++)
27 {
28 if (i == 0)
29 {
30 resultDr[i] = columns[k];
31 }
32 else
33 {
34 resultDr[i] = dataTable.Rows[i - 1][k].ToString();
35 }
36 }
37 resultDt.Rows.Add(resultDr);
38 }
39 resultDs.Tables.Add(resultDt);
40
41 return resultDs;
42 }

注意保证数组长度与表的列数相等,否则返回null。
作者:王亚峰
出处:http://www.cnblogs.com/wyfblog
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/wyfblog/p/2184144.html