Esta es una función muy útil si en algún momento necesitamos transponer los datos de un DataTable, recibe como parámetro un DataTable y devuelve otro DataTable.
private DataTable GenerateTransposedTable(DataTable inputTable) { DataTable outputTable = new DataTable(); // Se agregan las columnas haciendo un ciclo para cada fila // El encabezado de la primera columna es el mismo. outputTable.Columns.Add(inputTable.Columns[0].ColumnName.ToString()); // El encabezado para las demas columnas foreach (DataRow inRow in inputTable.Rows) { string newColName = inRow[0].ToString(); outputTable.Columns.Add(newColName); } // Se agregan las columnas por cada renglón for (int rCount = 1; rCount <= inputTable.Columns.Count - 1; rCount++) { DataRow newRow = outputTable.NewRow(); 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; }
Fuente : http://www.codeproject.com/Articles/44274/Transpose-a-DataTable-using-C