2013-12-22 69 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();