2013-12-22 2 views
1

내 C# winform 프로젝트에서 여러 사용자 컨트롤을 사용했습니다. 는 여기 데이터베이스에서 모든 사람이/교사를 표시 목록 상자를 포함하는이동적으로 사용자 정의 컨트롤 업데이트

Home > Person > Addperson 

Home > Teacher > AddTeacher 

사람과 교사 같은 두 가지 옵션이 포함되어 있습니다. Addperson을 사용하여 사람을 추가 할 때 데이터가 성공적으로 입력되었습니다. 그러나 내가 다시 돌아갈 때 사람 그것은 아무것도 보이지 않는다. 동시에 집에 돌아가 AddTeacher 옵션을 입력하면 드롭 다운 목록에서 새로 추가 된 데이터를 찾을 수 있습니다.

교사로 추가 한 사람이 으로 돌아 오면 교사은 실제로 데이터가 실제로 성공적으로 삽입되지 않습니다. 그런 다음 모든 프로그램을 닫고 다시 열면 모든 것이 올바르게 표시됩니다.

사용자 콘트롤 어쨌든 변경이있을 때마다 전체 프로그램을 닫지 않고 즉시 변경 사항이 표시됩니다.

다른 방법을 시도했지만 그 중 아무 것도 작동하지 않았습니다. 새로 고침 방법을 시도했습니다. 또한 실제 데이터 소스 선언 전에 을 datasource=null으로 시도했습니다. 사람 목록 상자에 대한

코드 : 내가 정확하게 예제를 이해한다면

var personListDictionary = new Dictionary<int, string>(); 

SqlCommand prsonListCmd = new SqlCommand("SQL QUERY", Connection); 
SqlDataReader dr = prsonListCmd.ExecuteReader(); 

if (dr.HasRows) 
{ 
    while (dr.Read()) 
    { 
     ... 
     personListDictionary.Add(Key, Value); 
    } 
} 

PersonList.DisplayMember = "Value"; 
PersonList.ValueMember = "Key";   
PersonList.DataSource = new BindingSource(personListDictionary, null); 
+0

그럼 당신은 어떻게 든 개인 또는 교사 사용자 컨트롤을 통지해야 새로 고침해야합니다. 한 가지 방법은 OnEntityAdded 또는 AddPerson 및 AddTeacher 사용자 컨트롤에서 유사한 것을 발생시키고 Person 또는 Teacher에서 처리하는 것입니다. – sventevit

+0

@sventevit 당신이하고 싶은 말을 잘 모르겠습니다. 더 자세히 설명해주십시오. 이러한 종류의 새로 고침을 수행하는 특정 방법이 있습니까? – Nabil

답변

0

는, 당신은이 사람과 AddPerson 사용자 컨트롤을 포함하는 하나 개의 Windows 폼.

  1. 가 AddPerson 사용자 컨트롤에 OnPersonAdded 이벤트 추가 :
  2. 는 사람이 사용자 컨트롤 (당신이 당신의 예에 게시 동일한 코드)
  3. 추가에 Refresh 메서드를 추가이 문제를 해결하기위한 하나 개의 옵션이다 사용자 정의 컨트롤의 데이터를 새로 고치는 기본 Windows 양식의 OnPersonAdded 처리기입니다.

AddPerson 사용자 컨트롤 :

public event EventHandler<object, EventArgs> OnPersonAdded; 

// When you add a Person, then raise the event: 
var handler = OnPersonAdded; 
if (handler != null) 
{ 
    OnPersonAdded(this, EventArgs.Empty); 
} 

사람의 사용자 제어 :

public void Refresh() 
{ 
    // your code from the example 
} 

부모 윈도우 양식 :

addPersonUserControl.OnPersonAdded += (sender, e) => personUserControl.Refresh(); 
관련 문제