如何在c#/.net 3.5中将数据集的方向从垂直改为水平
本文关键字:方向 数据集 垂直 水平 net | 更新日期: 2023-09-27 18:04:06
我有一个需求,我需要改变数据表的数据方向。假设数据垂直分布:
Year | 0-20 | 21-40 | 41-60 | >61 | Total
% total | 11.5 | 26.5 | 42.0 | 20.0 | 100.0
I want a method to change the orientation to horizontal like:
Year | % Total
0-20 | 11.5
21-40 | 26.5
41-60 | 42.0
>61 | 20.0
Total | 100.0
我使用c#和。net 3.5。我真的不能改变原始数据集。我必须在代码中做一些事情来处理它。这个转换后的数据集将被提供给一个现有的函数来做进一步的处理。
从这里取
public DataSet FlipDataSet(DataSet my_DataSet)
{
DataSet ds = new DataSet();
foreach (DataTable dt in my_DataSet.Tables)
{
DataTable table = new DataTable();
for (int i = 0; i <= dt.Rows.Count; i++)
{
table.Columns.Add(Convert.ToString(i));
}
DataRow r = null;
for (int k = 0; k < dt.Columns.Count; k++)
{
r = table.NewRow();
r[0] = dt.Columns[k].ToString();
for (int j = 1; j <= dt.Rows.Count; j++)
r[j] = dt.Rows[j - 1][k];
table.Rows.Add(r);
}
ds.Tables.Add(table);
}
return ds;
}
听起来你想要透视一个数据表
这里有一个方法可以帮助将每个列转换为行。这取决于你使更精细的细节工作按照你的要求。
private DataTable PivotTable(DataTable origTable)
{
DataTable newTable = new DataTable();
DataRow dr = null;
//Add Columns to new Table
for (int i = 0; i <= origTable.Rows.Count; i++)
{
newTable.Columns.Add(new DataColumn(origTable.Columns[i].ColumnName, typeof(String)));
}
//Execute the Pivot Method
for (int cols = 0; cols < origTable.Columns.Count; cols++)
{
dr = newTable.NewRow();
for (int rows = 0; rows < origTable.Rows.Count; rows++)
{
if (rows < origTable.Columns.Count)
{
dr[0] = origTable.Columns[cols].ColumnName; // Add the Column Name in the first Column
dr[rows + 1] = origTable.Rows[rows][cols];
}
}
newTable.Rows.Add(dr); //add the DataRow to the new Table rows collection
}
return newTable;
}