void addCalculatedColumn(DataTable pivotedDataTable, DataTable fieldIdAndNameTable, ICalcuation calculationStrategy)
        {
            List <int> values    = new List <int>();
            List <int> maxValues = new List <int>();

            DataColumn calculatedMarks = new DataColumn("calculated marks");

            pivotedDataTable.Columns.Add(calculatedMarks);

            List <string> fieldNames = new List <string>();
            List <int>    fieldIDs   = new List <int>();

            // Get subjectTable for maxMarks
            SqlDataAdapter adapter       = new SqlDataAdapter("SELECT maxMarks FROM subjectFields WHERE subjectid = " + getCurrentSubjectId(), conn);
            DataTable      maxMarksTable = new DataTable();

            adapter.Fill(maxMarksTable);

            foreach (DataRow row in fieldIdAndNameTable.Rows)
            {
                fieldIDs.Add(Convert.ToInt32(row["fieldid"]));
                fieldNames.Add(row["fieldname"].ToString());
            }

            foreach (DataRow row in pivotedDataTable.Rows)
            {
                values.Clear();
                maxValues.Clear();
                // Get marks of the student from pivotedDataTable
                foreach (DataColumn column in pivotedDataTable.Columns)
                {
                    // if the column is a field
                    if (fieldNames.Contains(column.ColumnName))
                    {
                        values.Add(Convert.ToInt32(row[column]));
                    }
                }

                // Get max marks
                foreach (DataRow marksRow in maxMarksTable.Rows)
                {
                    maxValues.Add(Convert.ToInt32(marksRow["maxMarks"]));
                }

                row[calculatedMarks] = calculationStrategy.getResults(values, maxValues);
            }

            return;
        }