我用 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);
在我的表单上,我有两个 DataGridViews
、teachersDataGridView
和 studentsDataGridView
以及两个绑定(bind)源 teachersBindingSource
和 studentsBindingSource
.
我像这样连接所有东西:
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/