动态更新usercontrol

时间:2013-12-22 15:19:40

标签: c# winforms user-controls

在我的C#winform项目中,我使用了几个用户控件。 这里包含两个选项,如

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

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的示例,那么您有一个Windows窗体,其中包含Person和AddPerson用户控件。解决这个问题的一个选择是:

  1. 在AddPerson用户控件中添加OnPersonAdded事件:
  2. 在Person用户控件中添加Refresh方法(与您在示例中发布的代码相同)
  3. 在Windows主窗体中添加OnPersonAdded的处理程序,该窗体刷新Person用户控件中的数据。
  4. 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();