7. Grades and the Gradebook
Who can use this: Course owner, INSTRUCTOR, and STA. Junior TAs (JTA) cannot access the gradebook at all — every gradebook screen returns “not authorized” for them. JTAs grade from within an activity instead.
Where: Course → Performance → Grades
(/courseware/course/{courseId}/performance/grades)
7.1 How the final percentage is calculated
Read this before you design your assessment scheme, because it will probably change your plan.
Final % = (Multimedia total + Lab total + Extra total)
──────────────────────────────────────────── × 100
(Multimedia max + Lab max + Extra max)
rounded to one decimal place.
⚠️ There is no category weighting. You cannot make Labs worth 50% and the Multimedia Book worth 30%. Every mark in the course goes into one flat pool, so a category’s real weight is simply the share of total marks it contributes.
To weight a category, change its marks. If you want labs to count double, author the lab activities out of twice the marks — that is the only lever.
If the total maximum is zero, the percentage is reported as 0.
Where each mark comes from
Category |
Built from |
Score used |
|---|---|---|
Multimedia Book |
Chapter → Concept → Quiz |
Marks obtained / total marks on the quiz |
Lab — Programming |
Programming activities |
visible + hidden + manual + rubric marks, from the submission marked selected for evaluation |
Lab — Virtual |
Virtual lab activities |
evaluation marks + additional marks |
Lab — Lab Quiz |
“Other” activities |
that quiz’s marks |
Extra |
Extra columns you create |
Whatever you enter or import |
Note the programming rule: only the submission selected for evaluation counts, not the latest one.
7.2 The three views
Switch views from the Configuration modal. (The view toggle is not in the toolbar — this catches people out.)
View |
Layout |
|---|---|
Flat (default) |
One column per quiz and per lab activity, plus a Total per category and a final |
Chapter-wise |
One column per chapter. Click to expand into sections and standalone elements (marked |
Section-wise |
A three-row header — Categories → Chapter/Lab → Items. Clicking a section cell opens a Quiz Details modal with per-question scores, which you can edit |

7.3 Editing a grade directly in the grid
Click a cell and type. Be aware of where the number goes:
Editing a quiz or lab score writes back to the source record — you are changing the student’s actual quiz history or submission marks, not a gradebook overlay.
Only Extra column values are stored in the gradebook itself.
There is no separate “save to gradebook” step and no undo. Editing a quiz score here is equivalent to re-marking their quiz.
7.4 Publishing grades to students
Grades are not visible to students until you publish. A new gradebook starts unpublished.
Open Configuration.
Turn Published on.
Until you do, every student sees:
Grades have not been released yet
They see the same message if you have not created a gradebook at all — so a student reporting that message may mean either “not published” or “not set up”.
When published, students see only the columns you have left visible (see §7.6).
7.5 Extra columns
Extra columns hold marks that BodhiTree does not generate itself — a paper exam, attendance, a viva, or free-text feedback.
Creating a column
You must supply:
Name
Type — either number or text. There is no default; you must choose.
Max marks — required for number columns
Text columns are always excluded from totals and always have max marks of 0.
Editing a column
⚠️ You cannot change a column’s type after it is created. Attempting it fails with “column_type cannot be changed after creation”. If you picked the wrong type, delete the column and make a new one — which deletes its data.
For number columns, “counted in total” and “visible to students” move together — turning one off turns the other off. You cannot have a column that students can see but which does not count, or vice versa.
For text columns, edits to max marks and to “counted” are silently ignored.
Text values are limited to 255 characters.
Deleting a column
⚠️ Deleting a column deletes every mark in it, for every student, permanently. There is no confirmation-by-typing and no undo. If the column came from a CSV import, use rollback instead (§7.8) — that is reversible and reports what it did.
7.6 Hiding columns from students / excluding from totals
Use the eye toggle on a column, or the Hide all / Show all button on a category band.
The effect differs by audience — this is important and not obvious:
You see |
Students see |
|
|---|---|---|
Excluded column |
Still shown, tagged with an |
Hidden entirely |
Its marks |
Removed from the category total |
Removed from the total and from the maximum |
So excluding a column does not penalise students — their denominator shrinks too.
Hide all / Show all works per category: Multimedia Book, Lab, or Extra.
7.7 Importing marks from a CSV
Where: Grades → import extra columns.
This is the fastest way to bring in an offline exam, and it is genuinely round-trippable: export, edit in a spreadsheet, re-import.
File requirements
Requirement |
Limit |
|---|---|
Format |
|
Size |
5 MB maximum |
First column |
Must be headed |
Minimum |
At least one grade column and at least one data row |
Headers |
No blank column headers |
Encoding is auto-detected, so a CSV saved straight out of Excel normally works.
Column header syntax
The header tells BodhiTree what kind of column to create:
Header |
Result |
|---|---|
|
Number column, out of 100 |
|
Same — the space is optional |
|
Decimals are allowed |
|
Text column |
|
Must match an existing column name exactly |
⚠️ You cannot change a column’s maximum by re-importing. If the name matches an existing column, the bracket is ignored and the existing type and maximum are kept. To change a maximum, edit the column.
A malformed header gives:
Invalid CSV format. Column headers must use: ColumnName[100] for numbers or ColumnName[text] for text columns.
[0] is rejected with “Max marks must be greater than 0”.
Cell values
Blank,
--,-,N/A,n/a,NA,naare skipped — no mark is created or changed. Use these to leave a student untouched.A number above the column maximum is rejected for that cell only; the rest of the import still proceeds.
Text over 255 characters is rejected for that cell.
Who gets matched
Only users actively enrolled in the course, with role Student, STA, or JTA. Emails match case-insensitively. Anyone else is reported under students not found, with their row number.
The import flow
Upload the file. You get a preview showing: rows found, sample data, suggested column mappings, students matched, students not found, how many grades are new vs existing, blank values skipped, and any validation errors.
Adjust the mapping per column — create, update, or skip.
Choose whether to overwrite existing values. This defaults to ON. With it off, students who already have a mark in that column are skipped.
Commit.

⏱ A preview expires after 10 minutes. If you leave it open longer you get “Preview expired. Please upload again.” and must re-upload.
Row numbers in error messages count the header as row 1, so your first student is row 2.
Template
The download template button gives you a static two-line example:
email,Column Name[100],Column Name[text]
student@example.com,85,Sample text
It is not pre-filled with your enrolled students. To get a file with your real roster in it, use Export (§7.9) instead and edit that.
7.8 Undoing an import (rollback)
Every import is recorded. Open the import history (the most recent 50 imports are kept) and delete an entry to roll it back.
Rollback is careful about work you have done since:
Columns that the import created are deleted, along with their marks
Marks the import created in pre-existing columns are deleted
Marks the import overwrote are restored to their previous value — but only if nobody has changed them since. A mark you edited by hand after the import is left alone and reported as skipped
You get a report listing columns deleted, grades deleted, grades restored, and grades skipped. The whole operation is atomic.
Prefer rollback to deleting columns by hand. It is reversible in intent, reports exactly what it touched, and will not destroy later manual corrections.
7.9 Exporting
Export produces a CSV file named gradebook_{courseId}.csv. The export
respects the view you choose (flat, chapter, or section).
There is no Excel export. The design documents mention one; it was never built. Open the CSV in Excel instead.
Column order is:
email, Name, Roll No,
MB: <item> …, MB Total,
Lab: <item> …, Lab Total,
<ExtraColumn>[100] …, Extra Total
Two things make this file re-importable directly:
emailis the first column, which is what import requiresExtra columns already carry their
[max]or[text]suffix
Empty cells export as --, which import treats as “skip” — so a round trip does not
overwrite blanks with zeros.
7.10 Stale grade warnings
If you change a marking rule after students have been graded, affected cells get an amber warning triangle with a reason:
the answer key changed
the marks changed
test cases changed
a question was added
a question was removed
⚠️ Nothing is recalculated automatically. The old score stays in place; the triangle is only telling you it may no longer be correct. You must re-grade or re-run evaluation yourself. There is no “re-evaluate all stale items” button.
Cosmetic edits — fixing a typo in the question text — do not raise the flag.
The warning appears in the flat view only. It does not appear in chapter or section views, so do your post-change review in flat view.
7.11 Deleting the gradebook
Deleting the gradebook removes the gradebook record and resets your view preferences. It does not delete your Extra Columns or their marks — those are attached to the course and survive. Recreating the gradebook brings them back.
Trying to create a second gradebook fails with “Gradebook already exists for this course”.
Known limitations
No category weighting — flat average only (§7.1)
No Excel export — CSV only
Stale flags only in flat view, with no bulk re-evaluation
Column type is immutable after creation
JTAs have no gradebook access whatsoever
The CSV template is a static sample, not your roster
Previous: 6. Exams and Proctoring · Next: 8. Announcements, Email and Forum