从另一个类更新DataGridView

时间:2014-02-12 16:20:25

标签: c# sql datagridview delegates

我的目的是刷新或更新从数据库获取数据并将其显示给用户的DataGridView。 应用程序由同一名称空间中的多个表单(和类)组成,在这种情况下,我指的是:

  • Function_Map包含dataGridView2
  • 的类
  • Tool_Field包含能够向数据库添加行的控件的类

我期待的是当用户从Tool_Field向数据库添加行时,系统会自动更新Function_Map类中的dataGridView2控件。在我看来

我认为该解决方案可以调用函数

private void SetDatagrid()
{
    SqlConnection conn = new SqlConnection(Settings.DataBasePath);

    Settings.DBAccess.FillDataGridViewFromReg(ref table);

    conn.Close();
}

因此我在Tool_Field

中宣布
public delegate void Update_Table_Delegate();

...

private void BT_ToolField_Click(object sender, EventArgs e)
{
    Update_Table_Delegate Update_Table = new Update_Table_Delegate(Function_Map.SetDatagrid);

    ... // Add row in database

    Update_Table();
    ...
}

发生的错误是Error 6 It should be a reference to an object property, method, or field is not static。 我可以解决这个问题,改变行

Update_Table_Delegate Update_Table = 
new Update_Table_Delegate(Function_RegisterMap.SetDatagrid);

Update_Table_Delegate Update_Table = 
new Update_Table_Delegate(Function_RegisterMap.SetDatagrid2);

其中SetDatagrid2声明为static,但在这种情况下,无法访问dataGridView2。

提前致谢

1 个答案:

答案 0 :(得分:0)

我认为,您需要event来更新grid。 在Tool_Field课程中,进行以下更改。

public delegate void Update_Table_Delegate(); //already declared
public event Update_Table_Delegate Changed; //declare event
//invoke event
public void OnChanged()
{
   if(Changed != null)
     Changed();
}

BT_ToolField_Click方法中调用OnChanged

Function_Map班级

 //put in c'tor or any appropriate place
 Tool_Field.Changed += new Update_Table_Delegate(SetDatagrid); 

让我知道它是否对你有所帮助。