转置数据表中只有一列

时间:2014-03-05 17:19:02

标签: c# .net asp.net-mvc-4

我有一个如下所示的DataTable:

enter image description here

我想将上表转置如下:

enter image description here

我可以使用以下代码来显示Header值:

 DataTable outputTable = new DataTable();
        outputTable.Columns.Add(inputTable.Columns[0].ColumnName.ToString());
        int rCount = 0;
        foreach (DataRow inRow in inputTable.Rows)
        {

            string DescColName = inRow[1].ToString();
            string maxColName = "MaxValue";
            string valColName = "Status";
            outputTable.Columns.Add(DescColName);
            outputTable.Columns.Add(maxColName);
            outputTable.Columns.Add(valColName);
        }

我正在尝试以下代码来填充失败的行。

for (int rCount = 0; rCount <= inputTable.Columns.Count - 1; rCount++)
        {
            DataRow newRow = outputTable.NewRow();

            for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++)
            {
                string colValue = inputTable.Rows[cCount][rCount].ToString();
                newRow[cCount] = colValue;
            }
            outputTable.Rows.Add(newRow);

        }

1 个答案:

答案 0 :(得分:0)

我想我明白为什么会失败。

在第二段代码中,如果在这些行上跟踪rCountcCount

string colValue = inputTable.Rows[cCount][rCount].ToString();
newRow[cCount] = colValue;

结果数据表的样子是

02/18/2014 | 02/18/2014 | 02/18/2014 | 02/19/2014 | 02/19/2014 | 02/19/2014 | ... //and on and on
Tire Alignment | Oil Change | Air Filter| Tire Alignment | Oil Change | Air Filter| ... //and on and on

等。因此,如果inputTable中的行数多于outputTable中的列数,则cCount会在某个时间点超过newRow中的可用列数。我怀疑这是导致错误的原因。不幸的是,为了计算具有相同报告日期的多行,我担心您可能需要重新编写整个解决方案。