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 つDataGridViews
のteachersDataGridView
とstudentsDataGridView
と 2 つのバインディング ソースteachersBindingSource
とがありstudentsBindingSource
ます。
私はすべてを次のように配線します:
teachersBindingSource.DataSource = teachers;
studentsBindingSource.DataSource = teachersBindingSource;
studentsBindingSource.DataMember = "Students";
teachersDataGridView.DataSource = teachersBindingSource;
studentsDataGridView.DataSource = studentsBindingSource;
そして、まるで魔法のように、教師用グリッドからアイテムを選択してフォームを実行すると、生徒用グリッドが変更されます。
挿入、更新、および削除を管理するには、ある種の変更追跡を自分で実装する必要があります (または、Entity Framework や nHibernate などの ORM を使用します)。これは独自の質問に値するトピックなので、これらのテクノロジについて読んで (そして、私が気に入っている以下のブログ記事を見てください)、特定の問題が発生したときに戻ってきてください。
この回答については、この優れた投稿から大いに借りました - 私が提供した例は完全であり、その著者の例の多くの複雑さを回避していますが、最終的には、少なくとも彼が議論するすべてについて知りたいと思うでしょう. 彼のデモをダウンロードして見てください。