4

データベースを表すクラスを C# Windows 形式で作成しました。List<> を使用してマスター/詳細を持っています

Trainings(master) と TrainingDetails(detail) を含む従業員プロファイルを含むレコード

さて、これを2つのデータグリッドビューに表示するにはどうすればよいですか?最初のデータグリッドビューから「トレーニング」を選択すると、2番目のデータグリッドビューに詳細が表示されます。

ユーザーが最初のデータグリッドビューから新しいアイテムを選択するたびに、2番目のデータグリッドビューのデータソースを簡単に変更できます。しかし、それが専門的にどのように行われるのか疑問に思っています。

また、保存も面倒です。データ行を繰り返し処理して保存することを考えていますが、更新、挿入、削除されたデータを知る必要があります。

私を助けてください。私は初心者です。

4

1 に答える 1

7

BindingSources がこれを処理します。

たとえば、教師と生徒の 2 つのクラスがあるとします。

public class Teacher
{
    private List<Student> _students = new List<Student>();
    public string Name { get; set; }
    public string Class { get; set; }
    public List<Student> Students { get { return _students; } }
}

public class Student
{
    public string Name { get; set; }
    public int Age { get; set; }
}

次に、マスター/詳細状況を表す教師のリストを作成できます。

List<Teacher> teachers = new List<Teacher>();
Teacher t = new Teacher();
t.Name = "Mr. Smith";
t.Class = "A1";
teachers.Add(t);

Student s = new Student();
s.Name = "Jimmy Jones";
s.Age = 6;            
t.Students.Add(s);

s = new Student();
s.Name = "Jane Doe";
s.Age = 5;
t.Students.Add(s);

t = new Teacher();
t.Name = "Ms. Allen";
t.Class = "B3";
teachers.Add(t);

s = new Student();
s.Name = "Sally Student";
s.Age = 7;
t.Students.Add(s);

私のフォームには、2 つDataGridViewsteachersDataGridViewstudentsDataGridViewと 2 つのバインディング ソースteachersBindingSourceとがありstudentsBindingSourceます。

私はすべてを次のように配線します:

    teachersBindingSource.DataSource = teachers;

    studentsBindingSource.DataSource = teachersBindingSource;
    studentsBindingSource.DataMember = "Students";

    teachersDataGridView.DataSource = teachersBindingSource;
    studentsDataGridView.DataSource = studentsBindingSource;

そして、まるで魔法のように、教師用グリッドからアイテムを選択してフォームを実行すると、生徒用グリッドが変更されます。


挿入、更新、および削除を管理するには、ある種の変更追跡を自分で実装する必要があります (または、Entity Framework や nHibernate などの ORM を使用します)。これは独自の質問に値するトピックなので、これらのテクノロジについて読んで (そして、私が気に入っている以下のブログ記事を見てください)、特定の問題が発生したときに戻ってきてください。


この回答については、この優れた投稿から大いに借りました - 私が提供した例は完全であり、その著者の例の多くの複雑さを回避していますが、最終的には、少なくとも彼が議論するすべてについて知りたいと思うでしょう. 彼のデモをダウンロードして見てください。

于 2012-06-02T14:42:50.660 に答える