0

リスト内のデータベースからデータ全体を取得していますか?今、私は次のような4つのクラスを持っています:

学生クラス:

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クラスにStudentIDではなくEnorllmentDataがあります。

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

あなたの型はorをStudentScore公開していませんが、それはあなたがバインドしようとしているものです。それがどのように機能すると思いますか?StudentIDCourseID

以下を使用できる場合があります。

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

...使用しているバインディングがそのようにプロパティをナビゲートできるかどうかによって異なります。

余談ですが、StudentTableandCourseTable型の命名は不適切です。 のインスタンスは a を表しておらず、テーブル内の1 つの行StudentTableを表しています。それらのタイプを呼び出すだけで、より理にかなっています。StudentCourse

于 2012-08-10T20:12:51.610 に答える
0

そのため、最初に、Jonがドット表記の使用方法を示すことで解決した、新しい表示メンバーにバインドできないというエラーが発生しました。

その後、「キャストできません」というエラーが発生します。その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 に答える