如何在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。我真的不能改变原始数据集。我必须在代码中做一些事情来处理它。这个转换后的数据集将被提供给一个现有的函数来做进一步的处理。

如何在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;
}