This is your sql:
SELECT Courses.Courseid,
Grades.Grade,
Students.Studentid,
Students.Title,
Students.Firstname,
Students.Lastname
FROM Courses
INNER JOIN Grades
ON Courses.Courseid = Grades.Courseid
INNER JOIN Students
ON Grades.Studentid = Students.Studentid
WHERE ( Courses.Coursename = @CourseID )
Isn't it Courses.Courseid
instead of Courses.Coursename
? So:
WHERE ( Courses.Courseid = @CourseID )
( one of the reasons why i avoid declarative datasource controls )