C# 我在显示成员值时出错,如何修复?

C# 我在显示成员值时出错,如何修复?,c#,c#-4.0,C#,C# 4.0,我正在从列表中的数据库检索整个数据?现在我有四个类,如: 学生班级: public class StudentTable { public string StudentID { get; set; } public string StudentName { get; set; } public StudentTable() { } public StudentTable(string aStudentID, string aStudentNam

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

学生班级:

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;
    }
}
学生成绩班:

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类中,我有大量的数据,而不是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?

您的
StudentScore
类型不会公开
StudentID
CourseID
,但这正是您试图绑定的内容。你认为这怎么行

您可以使用:

comboBox3.DisplayMember = "EnrollmentData.StudentData.StudentID";
comboBox3.ValueMember = "EnrollmentData.CourseData.CourseID";
。。。这取决于您使用的任何绑定是否能够以这种方式导航属性


另外,您对
StudentTable
CourseTable
类型的命名是不合适的-一个实例不代表
StudentTable
-它代表表中的一行。只需调用那些类型的
Student
Course
就更有意义了。

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

在此之后,您现在将获得无法施放错误。没有看到GetAllScore方法,我无法确切说明原因。但是,通过向StudentScore添加只读属性以返回要用作显示和值成员的内容,您可以自己在代码中完成繁重的工作,并简化绑定。(我必须说,将StudentID用作DisplayMember,将CourseID用作ValueMember对我来说毫无意义。)

将以下内容添加到您的学生分数中:

public String UseAsDisplayMember
{
    get 
    {
        return EnrollmentData.StudentData.StudentID; 
    }
}
public string UseAsValueMember
{
    get 
    {
        return EnrollmentData.CourseData.CourseID; 
    }
}
然后将数据绑定设置为:

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

<>这会让你工作,但它更像是一个创可贴,而不是一个真正的修复。

“它告诉我一个显示成员错误”——你能说得更精确吗?总是在问题中给出错误信息。你是否从C#重写到VB.NET?你在C#、VB.NET或两者中都有错误吗?错误是什么?现在它显示了这个错误:无法将类型为“System.Windows.Forms.RelatedPropertyManager”的对象强制转换为类型为“System.Windows.Forms.CurrencyManager”。@user1059932:恐怕我对此一无所知。如果你发布完整的堆栈跟踪,这会有所帮助。首先,它显示:无法绑定到新的显示成员。参数名称:newDisplayMember@user1059932:在哪里?什么时候抱歉,但你必须提供更好的诊断信息。请阅读所有相关信息并将其编辑到您的问题中。@user1059932:您可以从更改catch块开始,这样您就不会只显示消息和类型。只需打印出
ex
本身。。。这将包括堆栈跟踪。