2012-04-25 3 views
2

부모 레코드가있는 목록 스타일 양식 및 선택한 상위 레코드에 대한 많은 관련 하위 레코드가있는 Windows 양식 응용 프로그램이 있습니다.Windows Forms C#

즉. 복수 인보이스/견적/서신 등을 보유한 고객

내 양식 레이아웃에는 상위 레코드 목록이 있으며 사용자가 상위 레코드를 선택하면 양식의 다른 목록에 관련 하위 정보가 채워집니다. 이러한 모든 목록은 사용자가 모든 레코드에 대한 세부 양식을 열 수 있습니다. 예를 들어 사용자 1은 고객 1을 선택한 다음 세부 정보를 선택할 수 있으며 고객 세부 정보 양식은 고객 1 정보가 표시된 상태로 열립니다. 사용자는 다시 돌아가서 고객 1에 대한 관련 레코드를 선택할 수 있으며, 송장 1을 말한 다음 송장 1 정보를 표시하는 송장 세부 양식을 열 수 있습니다.

언제든지 사용자가 여러 인보이스/견적/서신 등 등 세부 양식을 열었을 수 있습니다. 사용자는 다른 고객을 선택하고 세부 양식을 여는 동일한 프로세스를 진행할 수도 있습니다.

고객 1을 선택하고 사용자가 세부 양식을 표시하려고 할 때 열려있는 모든 양식을 확인하여 고객 1 세부 양식이 이미 열려 있는지 확인해야합니다.

나는이 suituation에서 좋은 연습으로 간주되는 것이 궁금했습니다.

나는 어떤 방식 으로든 모든 양식에 적용 할 수있는 일반적인 접근법을 찾으려고했습니다.

+0

본인의 원래 질문에 더 자세히 설명하고 이러한 세부 양식을 열 때 훨씬 더 복잡해지기 때문에 목록이 포함될 수 있으며이 목록은 일부 유형의 세부 양식을 생성 할 수 있습니다. 나는 그것이 관련된 형태의 나무와 같다고 생각합니다. 내가 가지고있는 주요 문제는 양식의이 트리에서 어딘가에 부모 정보를 삭제하면 모든 열린 양식을 통해 관련있는 세부 양식을 찾고 그에 따라 닫아야한다는 것입니다. Id와 parentId가있는 테이블을보고 특정 ID와 관련된 모든 자식 레코드를 삭제하고 싶습니다 .... 희망적이라고 생각합니다. - – trailerman

답변

0

왼쪽에서 고객 목록을 작성하고 오른쪽에 고객 정보가있는 패널을 만들 수 있습니다. 고객을 클릭하면 패널에 새 고객 정보가 업데이트됩니다.

(탐색기 창에서 어떻게 작동하는지 생각해보십시오. 왼쪽에있는 폴더, 오른쪽에 선택한 폴더의 정보)

등의 이름과 송장의 목록 클릭으로 고객 정보를 개최한다 패널 인보이스에 새 양식으로 인보이스가 열립니다. 고객 세부 사항을 새 양식으로 열 필요는 없습니다.

+0

내 원래의 질문에 더 나아가 이러한 세부 양식을 열 때 훨씬 더 복잡해지기 때문에 목록이 포함될 수 있으며이 목록은 일부 유형의 세부 양식을 생성 할 수 있습니다. 나는 그것이 관련된 형태의 나무와 같다고 생각합니다. 내가 가지고있는 주요 문제는 양식의이 트리에서 어딘가에 부모 정보를 삭제하면 모든 열린 양식을 통해 관련있는 세부 양식을 찾고 그에 따라 닫아야한다는 것입니다. Id와 parentId가있는 테이블을보고 특정 ID와 관련된 모든 자식 레코드를 삭제하고 싶습니다 .... 희망적이라고 생각합니다. – trailerman

0

한 가지 방법은 양식 인스턴스를 목록에 저장하고 새 양식을 열기 전에 해당 인스턴스를 찾으려는 것입니다. 모든 다른 사람들이 상속하는 "기본 양식"이 있으면 속성이있는 "기본 양식" 고객 번호).

양식을 닫을 때 목록 항목이 제거되었는지 확인해야합니다.

원하는 경우 여기서 의사 코드를 제공 할 수 있습니다.

0

같은 양식을 여러 번 열어야하지만 같은 고객 정보를 두 번 표시 할 필요가 없습니다. 그렇다면 고객 정보 양식 (예 : 고객 ID 목록)에 고객의 정적 목록을 작성하고 새 인스턴스를 확인하는 옵션이 있습니다. 고객이 정적 목록에 존재하는 경우 이미 열린 세부 정보 양식 표시 또는 초점을 취소 할 수 있습니다 (물론 양식 핸들을 저장하는 경우).

1

어딘가에 IDictionary<Customer, Form>을 저장할 수 있습니다. dict은 물론 지역되지 않을 것,도 cust이 될 것입니다 :

var dict = new Dictionary<Customer, Form>(); 
var cust = new Customer(); 

if(!dict.ContainsKey(cust) || dict[cust].IsDisposed) 
{ 
    dict[cust] = new Form1(); 
} 

dict[cust].Show(); 
dict[cust].Activate(); 

이 샘플은 조금 단축이 간단하고 O (1) 조회를 할 수 있도록한다. 인스턴스 필드와 매개 변수가됩니다.

0

다른 옵션은 MDI 양식을 사용하는 것입니다. MDI 양식의 하위 항목으로 모든 양식을 엽니 다. 새 양식을 여는 동안 항상 이미 존재하는지 여부를 확인할 수 있습니다.

자세한 내용은 this 문서를 참조하십시오.

희망이 도움이됩니다.

장점 : 이미 열려있는 인스턴스의 별도 목록을 유지할 필요가 없습니다.