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
本身。。。这将包括堆栈跟踪。