2012-06-02 2 views
4

데이터베이스를 나타 내기 위해 C# Windows 형식으로 클래스를 만들었습니다. 그것은>두 개의 datagridview에 마스터/디테일로 바인딩 클래스

지금 교육 (마스터)와 TrainingDetails (세부 사항)을 고용 프로파일 레코드, I가 2 DataGridView에 이것을 표시하는 방법 I "는를 선택 <마다 목록을 사용하여 마스터/디테일을 가지고 교육 "첫 번째 datagridview에서 두 번째 datagridview에 대한 세부 정보를 표시합니다.

사용자가 첫 번째 DataGridview에서 새 항목을 선택할 때마다 두 번째 DataGridview의 데이터 소스를 쉽게 변경할 수 있습니다. 그러나 그것이 어떻게 전문적으로 행해지는지 궁금해합니다.

또한 저장은 고통이며, 나는 데이터row를 반복하여 저장하지만, 데이터가 업데이트되고, 삽입되고, 삭제 된 것을 알아야한다는 것을 의미합니다.

도와주세요. 이 초보.

+0

원하는 정보가 있으면 받아 들일 수있는 답변을 표시하지 마십시오. –

답변

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; } 
} 
그런 다음 마스터/상세 상황을 나타내는 교사의 목록을 만들 수 있습니다

: 내 폼 I에

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이 있습니다. 그래서 같은

I 와이어 모든 업 :

teachersBindingSource.DataSource = teachers; 

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

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

그리고 교사 그리드에서 항목을 선택 양식에 최대 실행할 때 마술처럼

학생들 그리드를 변경합니다.


관리 삽입, 업데이트

당신이 자신을 추적 변화의 일종을 구현 (또는 엔티티 프레임 워크 또는 nHibernate 수와 같은 ORM을 사용)해야합니다 삭제합니다. 독자적인 질문을 할 가치가있는 주제이기 때문에 해당 기술을 읽고 (아래에서 내가 좋아하는 블로그 게시물을보십시오) 특정 문제가있을 때 다시 돌아옵니다. 내가 this 우수 게시물에서 많이 빌려이 답변


- 내가 준 예는 완료되고 그 저자의 예의에 많은 복잡성을 피할 수 있지만, 결국 당신은 아마 적어도 모든 것에 대해 알고 싶은 것 그는 토론합니다. 데모를 다운로드하고 살펴보십시오.

관련 문제