【问题标题】:Binding class with master/detail into two datagridview将具有主/详细信息的类绑定到两个数据网格视图中
【发布时间】:2012-06-07 06:49:04
【问题描述】:

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

的主/详细信息

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

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

只要用户从第一个 datagridview 中选择一个新项目,就可以轻松更改第二个 datagridview 的数据源。但我想知道它是如何专业地完成的。

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

请帮助我。我是新手。

【问题讨论】:

  • 如果你得到了你想要的信息,别忘了将答案标记为已接受..

标签: winforms binding datagridview master-detail


【解决方案1】:

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

然后您可以创建代表主/详细情况的教师列表:

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 以及两个绑定源 teachersBindingSourcestudentsBindingSource

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

    teachersBindingSource.DataSource = teachers;

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

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

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


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


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

【讨论】:

    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2010-12-06
    • 2010-09-28
    • 2012-08-10
    相关资源
    最近更新 更多