4

我在 C# Windows 窗体中创建了一个类来表示我的数据库。它有一个使用 List<> 的主/详细信息

包含员工档案的记录,包含 Trainings(master)和 TrainingDetails(detail)

现在,我如何将其显示到 2 个 datagridview 中,每当我从第一个 datagridview 中选择“培训”时,它都会在第二个 datagridview 上显示详细信息。

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

保存也是一种痛苦,我想遍历数据行并保存它,但这意味着我必须知道哪些数据已被更新、插入和删除。

请帮我。我是新手。

4

1 回答 1

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; }
}

然后,您可以创建一个代表 Master/Detail 情况的 Teachers 列表:

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);

在我的表单上,我有两个DataGridViews,teachersDataGridViewstudentsDataGridView两个绑定源teachersBindingSourcestudentsBindingSource.

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

    teachersBindingSource.DataSource = teachers;

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

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

当在表格上运行时,从教师网格中选择一项更改学生网格,就好像施了魔法一样。


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


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

于 2012-06-02T14:42:50.660 回答