我的目的是刷新或更新从数据库获取数据并将其显示给用户的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。
提前致谢
答案 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);
让我知道它是否对你有所帮助。