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.
⚠️ Unmarked activities count as zero. The maximum is the total of every activity in the course, whether or not a student has attempted it and whether or not it has been graded yet. Early in a term the percentage will therefore look very low for everyone. To keep it meaningful, exclude activities that are not yet in play (§7.6) — excluding an item removes it from the maximum too.
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 - 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 Grades Configuration modal, opened with the Configuration button in the page header. (The view toggle is not in the toolbar; this catches people out.) The setting is called Default View.
View |
Layout |
|---|---|
Flat (default) |
Listed as “Flat (Consolidated View)”. 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 four-row header: Categories → Chapter/Lab → Sections → individual questions. Multimedia question scores are displayed but not clickable; clicking a Lab Quiz activity cell opens a Lab Quiz Questions modal with per-question scores 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.
The control is in the page header, not in the Configuration modal: a status badge reads ⚠ Grades not published, and beside it is a Publish button (which becomes Unpublish once grades are live).
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.
CSV import rejects text values over 255 characters. Typing directly into a cell is not length-checked, so treat 255 as a convention rather than a guarantee.
Deleting a column
⚠️ Deleting a column deletes every mark in it, for every student, permanently. You get a Delete Column confirmation first (“All grades for this column will be permanently lost.”), but once you confirm there is no undo. If it 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 eye button on a category band header (its tooltip reads “Hide all columns from students” / “Show all columns to students”).
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.
The band toggle 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. You can round-trip through a spreadsheet — export, edit, re-import — but not with the export file as it stands; see §7.9 for the columns you have to remove first.
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.
[0] is also rejected, but with that same generic message rather than anything
specific about the maximum — so check your brackets if you see it.
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, the first 5 rows of sample data, the column mapping BodhiTree worked out, students matched, students not found, how many grades are new vs existing, blank values skipped, and any validation errors.
Check the mapping. It is read-only — each column is tagged Will Create or Will Update based on its header, and you cannot override it or skip a column. If the mapping is wrong, fix the headers in the file and upload again.
Commit.
⚠️ Existing marks are always overwritten. There is no overwrite option; the import unconditionally replaces any mark a student already has in a matched column. If that is not what you want, drop those columns from the CSV before importing, or be ready to roll the import back (§7.8).

⏱ 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 50 most recent are listed) and use Undo Import on 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
Marks whose record was deleted outright after the import are silently passed over; they appear in neither the restored nor the skipped count
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
⚠️ You cannot re-import this file unchanged. Import understands only
Name[100]orName[text], and the exact names of existing extra columns.Name,Roll No,MB: …,MB Total,Lab: …andLab Totalmatch none of those, and one unrecognised header rejects the entire file with the generic “Invalid CSV format” message.To round-trip, delete every column except
Two things then make the trimmed file import cleanly:
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”.
Previous: 5. Labs and Activities · Next: 8. Announcements, Email and Forum