将master/detail绑定到两个datagridview中

Ger*_*abe 4 binding datagridview master-detail winforms

我用C#Windows表单创建了一个类来表示我的数据库.它具有使用List <>的主/细节

带有培训(主)和TrainingDetails(详细信息)的员工配置文件的记录

现在,我如何将其显示为2 datagridview,每当我从第一个datagridview选择"Training"时,它将在第二个datagridview上显示详细信息.

每当用户从第一个datagridview中选择一个新项时,它就很容易改变第二个datagridview的数据源.但我想知道它是如何专业地完成的.

另外保存是一种痛苦,我想迭代数据流并保存它但它意味着我必须知道什么是更新,插入和删除的数据.

请帮我.我是新手.

Dav*_*all 7

BindingSources为您解决这个问题.

比如说我有两个班,教师和学生:

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; }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建一个代表主/细节情况的教师列表:

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);
Run Code Online (Sandbox Code Playgroud)

在我的形式我有两个DataGridViews,teachersDataGridView并且studentsDataGridView两个结合来源teachersBindingSourcestudentsBindingSource.

我把所有东西都连接起来:

    teachersBindingSource.DataSource = teachers;

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

    teachersDataGridView.DataSource = teachersBindingSource;
    studentsDataGridView.DataSource = studentsBindingSource;
Run Code Online (Sandbox Code Playgroud)

并且好像通过魔术在表单上运行时从教师网格中选择项目会更改学生网格.


要管理插入,更新和删除,您需要自己实现某种更改跟踪(或使用ORM,如Entity Framework或nHibernate).这是一个值得提出自己问题的主题,所以请阅读这些技术(并查看我喜欢的博客文章),并在遇到一些具体问题时回来.


对于这个答案,我从这篇优秀的帖子中大量借用- 我给出的例子是完整的并且避免了作者示例中的很多复杂性,但最终你可能想要至少知道他讨论的所有内容.下载他的演示并看看.