2012-08-10 24 views
0

我从列表数据库中检索整个数据现在我有四个类,如:我在显示成员值中出现错误,如何解决此问题? ?

Student类:

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错误,您可以请帮我解决这个问题,在becaouse类StudentScore没有StudentID变量,这样我怎么能显示从StudentScore类StudentID?

+0

“它向我展示了一个DisplayMember错误” - 你能更精确吗?*总是*在问题中给出错误信息。 – 2012-08-10 20:11:18

+0

您是否将C#重写为VB.NET?你在C#,VB.NET或两者中都有错误吗?什么是错误? – abatishchev 2012-08-10 20:12:29

回答

0

因此,首先你有不能绑定到新的显示成员错误,这是由乔恩解释,告诉你如何使用点符号。

之后,您现在正在获取无法铸造错误。没有看到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"; 

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

+0

非常感谢 – user1059932 2012-08-10 21:40:51

1

您的StudentScore类型未公开StudentIDCourseID,但这就是您要绑定的内容。你如何期望这项工作?

可能能够使用:

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

...这取决于你使用任何是否结合是能够导航性能的方式。

顺便说一句,你的StudentTableCourseTable类型的命名是不恰当的 - 那一个实例并不代表StudentTable - 它代表了一个表一行。只要调用那些类型StudentCourse会更有意义。

+0

现在它显示这个错误:**无法投入'System.Windows.Forms.RelatedPropertyManager'类型的对象来键入'System.Windows.Forms.CurrencyManager'。** – user1059932 2012-08-10 20:29:06

+0

@ user1059932:恐怕我没有对此有所了解。这将有助于如果你发布完整的堆栈跟踪。 – 2012-08-10 20:30:06

+0

首先它显示:**不能绑定到新的显示成员。参数名称:newDisplayMember ** – user1059932 2012-08-10 20:30:35

相关问题