winforms - 将具有主/详细信息的类绑定(bind)到两个 datagridview 中

标签 winforms binding datagridview master-detail

我用 C# Windows 形式创建了一个类来代表我的数据库。 它有一个使用 List<>

的主/详细信息

包含培训(主)和培训详细信息(详细)的员工个人资料的记录

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

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

保存也很痛苦,我想迭代数据行并保存它,但这意味着我必须知道更新、插入和删除的数据是什么。

请帮助我。我是新手。

最佳答案

BindingSources 会为您处理这个问题。

例如,假设我有两个类(class),教师和学生:

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

在我的表单上,我有两个 DataGridViewsteachersDataGridViewstudentsDataGridView 以及两个绑定(bind)源 teachersBindingSourcestudentsBindingSource.

我像这样连接所有东西:

    teachersBindingSource.DataSource = teachers;

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

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

就像魔术一样,当在表单上运行时,从教师网格中选择一个项目会更改学生网格。

<小时/>

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

<小时/>

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

关于winforms - 将具有主/详细信息的类绑定(bind)到两个 datagridview 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10860262/

相关文章:

c# - 删除dataGridView的最后一个空行

c# - Windows 如何从桌面快捷方式强制 "minimized"状态?

c# - wpf 绑定(bind)到另一个 xaml 文件中的元素

mysql - Perl 或 MySQL 问题

c# - Windows 窗体 DataGridView 将 SelectedIndexChanged 事件附加到 ComboBox

c# - 模糊图像的选定部分

c# - 数据源更改时未调用 ComboBox SelectedValueChanged

wpf - 公开 WPF 中绑定(bind)的内部 Control 属性

c# - 如何从简单的 DataTable 创建 DataGridViewComboBoxColumn

c# - 即使在将 DataGridView 标题设置为 MiddleCenter 后,标题也略微向左对齐