2014-02-12 43 views
0

我的目的是刷新或更新从数据库获取数据并将其显示给用户的DataGridView。 该应用程序是由几个形式(和类)在同一个命名空间组成的,在这种情况下,我指的是:包含dataGridView2 从另一个类更新DataGridView

  • Tool_Field类,它包含可以添加行控制

    • Function_Map类到数据库

    什么我期待的是,当用户从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

    我想,你需要一个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); 
    

    让我知道,如果它可以帮助你。