簡體   English   中英

從另一個類更新DataGridView

[英]Update DataGridView from another class

我的目的是刷新或更新從數據庫獲取數據並將其顯示給用戶的DataGridView。 該應用程序由同一個名稱空間中的幾種形式(和類)組成,在這種情況下,我指的是:

  • 包含dataGridView2 Function_Map
  • 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 staticError 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聲明為靜態,但在這種情況下,無法訪問dataGridView2。

提前致謝

我認為,您需要一個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); 

讓我知道是否有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM