0

我正在从列表中的数据库中检索整个数据?现在我有四个类:

学生班级:

public class StudentTable
{
    public string StudentID { get; set; }
    public string StudentName { get; set; }

    public StudentTable()
    {
    }

    public StudentTable(string aStudentID, string aStudentName)
    {
        StudentID = aStudentID;
        StudentName = aStudentName;
    }
}

课程班

public class CourseTable
{
    public string CourseID { get; set; }
    public string CourseName { get; set; }
    public int Credits { get; set; }

    public CourseTable()
    {
    }

    public CourseTable(string aCourseID, string aCourseName, int aCredits)
    {
        CourseID = aCourseID;
        CourseName = aCourseName;
        Credits = aCredits;
    }
}

招生班

public class Enrollment
{
    public StudentTable StudentData { get; set; }
    public CourseTable CourseData { get; set; }
    public DateTime DOE { get; set; }

    public Enrollment()
    {
    }

    public Enrollment(StudentTable aStudentData, CourseTable aCourseData, DateTime aDOE)
    {
        StudentData = aStudentData;
        CourseData = aCourseData;
        DOE = aDOE;
    }
}

StudentScore类:

public class StudentScore
{

    public Enrollment EnrollmentData { get; set; }
    public int Score { get; set; }

    public StudentScore()
    {
    }

    public StudentScore(Enrollment aEnrollmentData, int aScore)
    {
        EnrollmentData = aEnrollmentData;
        Score = aScore;
    }
}

我通过查询从数据库中检索数据现在我想从列表中显示 StudentID 但在 StudentScore 类中我有 EnorllmentData 而不是 StudentID。

try
{
    var aStudentScore = EnrollmentDB.GetAllScore();
    comboBox3.DataSource = aStudentScore;

    comboBox3.DisplayMember = "StudentID";
    comboBox3.ValueMember = "CourseID";
    //comboBox3.ValueMember = "Score";
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, ex.GetType().ToString());
}

它向我显示了一个 DisplayMember 错误,你能帮我解决它吗,因为 StudentScore 类中没有 StudentID 变量,所以我如何显示 StudentScore 类中的 StudentID?

4

2 回答 2

1

您的StudentScore类型不公开StudentIDor CourseID,但这就是您要绑定的内容。你希望它如何工作?

也许可以使用:

comboBox3.DisplayMember = "EnrollmentData.StudentData.StudentID";
comboBox3.ValueMember = "EnrollmentData.CourseData.CourseID";

...这取决于您使用的任何绑定是否能够以这种方式导航属性。

StudentTable顺便说一句,您对and类型的命名CourseTable是不合适的-它的实例不代表 a-StudentTable它代表表中的一行。只是调用这些类型StudentCourse更有意义。

于 2012-08-10T20:12:51.610 回答
0

因此,首先您遇到了无法绑定到新的显示成员错误,Jon 通过向您展示如何使用点符号来解决该错误。

之后,您现在会收到Unable to cast错误。如果没有看到 GetAllScore 方法,我无法确切地说出原因。但是,您可以自己在代码中完成繁重的工作,并使绑定变得简单,方法是向 StudentScore 添加只读属性以返回您想要用作显示和值成员的内容。(我不得不说,使用 StudentID 作为 DisplayMember 和 CourseID 作为 ValueMember 对我来说没有任何意义。)

将这样的内容添加到您的 StudentScore:

public String UseAsDisplayMember
{
    get 
    {
        return EnrollmentData.StudentData.StudentID; 
    }
}
public string UseAsValueMember
{
    get 
    {
        return EnrollmentData.CourseData.CourseID; 
    }
}

然后将数据绑定设置为:

comboBox3.DisplayMember = "UseAsDisplayMember";
comboBox3.ValueMember = "UseAsValueMember";

这应该让你工作,但感觉更像是一种创可贴,而不是真正的修复。

于 2012-08-10T21:15:27.107 回答