2013-12-22 68 views
1

在我的C#winform項目中,我使用了幾個用戶控件。 這包含兩個選項,這樣動態更新usercontrol

Home > Person > Addperson 

Home > Teacher > AddTeacher 

人員和教師含有從數據庫中顯示所有的人/教師列表框。 當我添加使用添加人,數據輸入成功。但是當我回到它沒有顯示任何東西。同時如果我回到家裏並進入AddTeacher選項,在這裏從下拉列表中我可以找到新添加的數據。

現在,如果我將該人員添加爲教師並返回教師,它將不顯示任何內容,但實際插入的數據不會成功。然後,如果我關閉整個程序並重新打開,而不是所有內容都正確顯示。

我只想刷新那些usercontrol以便每次發生任何更改時都會立即顯示該更改,而不會關閉整個程序。

我嘗試過不同的方法,但沒有一個能起作用。我試過刷新方法。在實際數據源聲明之前,還嘗試使用 和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

那麼你必須以某種方式通知該人或教師用戶控件他們必須刷新。一種方法是在AddPerson和AddTeacher用戶控件中引發OnEntityAdded或類似內容,並在Person或Teacher中處理它。 – sventevit

+0

@sventevit我不知道你想說什麼。請解釋更多。有什麼具體的方法來做這種刷新嗎? – Nabil

回答

0

如果我正確理解你的榜樣,那麼你有一個Windows窗體,其中包含個人和addPerson的用戶控件。解決辦法之一是:

  1. 在addPerson的用戶控件添加OnPersonAdded事件:
  2. 在個人用戶控件(即你在你的例子貼出相同的代碼)
  3. 添加,添加刷新方法主Windows窗體中的OnPersonAdded處理程序,用於刷新Person用戶控件中的數據。

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();