2014-02-12 7 views
0

моя цель - обновить или обновить DataGridView, который получает данные из базы данных и показывает их пользователю. приложение состоит из нескольких вида (и классов) в том же пространстве имен, в данном случае я имею в виду:Обновление DataGridView из другого класса

  • Function_Map класса, который содержит dataGridView2
  • Tool_Field класс, который содержит элемент управления, способный добавлять строки в базе данных

что я ожидаю, что когда пользователь добавляет строку в базу данных из Tool_Field система обновляет автоматически контроль dataGridView2 в Function_Map классе. На мой взгляд

Я думаю, что решение может быть вызов функции

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 объявлен статическим, но в данном случае не представляется возможным выходом на 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); 

Позвольте мне знать, если это поможет.

Смежные вопросы