2013-04-21 67 views
1

在我的父窗體中,我使用組合框填充項目,使用DataTable作爲DataSource,它看起來像這樣。當子窗體關閉時刷新組合框

 sourceTypes = myDataBase.SourceType.ToList<SourceTypes>(); 

     DataTable dt = new DataTable(); 
     DataColumn dc1 = new DataColumn("Name"); 
     DataColumn dc2 = new DataColumn("ID"); 

     dt.Columns.Add(dc1); 
     dt.Columns.Add(dc2); 

     foreach (SourceType sourceType in sourceTypes) 
     { 
      string sourceTypeName = sourceType.sourceTypeName; 
      string ID = sourceType.sourceTypeID.ToString(); 
      dt.Rows.Add(sourceTypeName, ID); 
     } 

     comboBox3.DataSource = dt; 
     comboBox3.ValueMember = "ID"; 
     comboBox3.DisplayMember = "Name"; 

從我的父窗體我打電話給我的孩子形式,我的新記錄添加到myDataBase,我想作爲子窗體關閉這個新添加的記錄,儘快在我父母的形式組合框可見。所以我想從我的childFrm中調用這樣的東西,它會刷新組合框。

 private void FrmChild_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      FrmParent.refresh(); 
     } 

現在我需要靜態刷新方法在我的父窗體中,我不能真正去工作。我怎麼能完成它?乾杯

編輯:子窗體在這裏隆重開幕:

private void button7_Click(object sender, EventArgs e) 
    { 
     FrmChild frmChild = new FrmChild(); 
     frmChild.ShowDialog(); 
     frmChild.Dispose(); 
    } 

EDIT2:我想是這樣的(沒有靜態方法),但沒有奏效

在我的孩子形式:

 private void FrmChild_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      FrmParent frmParent = new FrmParent(); 
      frmParent.refresh(); 
     } 

在我的父窗體中,刷新方法(將新記錄添加到myDataBase之後)。

 sourceTypes = myDataBase.SourceType.ToList<SourceTypes>(); 

     DataTable dt = new DataTable(); 
     DataColumn dc1 = new DataColumn("Name"); 
     DataColumn dc2 = new DataColumn("ID"); 

     dt.Columns.Add(dc1); 
     dt.Columns.Add(dc2); 

     foreach (SourceType sourceType in sourceTypes) 
     { 
      string sourceTypeName = sourceType.sourceTypeName; 
      string ID = sourceType.sourceTypeID.ToString(); 
      dt.Rows.Add(sourceTypeName, ID); 
     } 

     comboBox3.DataSource = dt; 
     comboBox3.ValueMember = "ID"; 
     comboBox3.DisplayMember = "Name"; 

試過這樣,combobox仍然沒有刷新。

+1

如何子窗體打開/關閉?你使用模式彈出? – nmat 2013-04-21 22:25:31

+0

你可以確認你的'refresh'方法在從父表單本身調用時是否正在工作?你有沒有理由讓它變成靜態的?如果您只是將其設置爲靜態,以便您可以從子窗體訪問它,那麼您不必這樣做,因爲您可以傳遞對窗體實例的引用。 – keyboardP 2013-04-21 22:39:00

+0

@keyboardP是的,我使它靜態,所以我可以從我的孩子形式訪問它。我想這是更好的內存管理,然後每次關閉子窗體時創建新的parentForm對象。 – Whizzil 2013-04-21 22:44:07

回答

0

您可以將您的父母表單傳遞給您的子表單並調用其方法。在你的子表單中創建一個構造函數,它接受你的父表單,並且不要使你的方法變爲靜態的。還請嘗試處理Closing事件而不是Closed事件。

FrmChild類:

private FrmParent parentForm = null; 
public FrmChild(FrmParent pf) 
{ 
    parentForm = pf; 
} 

現在,當closing,你可以調用刷新方法

private void FrmChild_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if(parentForm != null) 
     parentForm.refresh(); 
} 

FrmParent類

private void button7_Click(object sender, EventArgs e) 
{ 
    using(FrmChild frmChild = new FrmChild(this)) 
    { 
     frmChild.ShowDialog();  
    } 
} 
+0

謝謝,它工作:) – Whizzil 2013-04-21 23:16:17

+0

@Whizzil - 不客氣:)只是一件事。您的刷新方法重新創建整個數據表,但這不是必需的。您可以嘗試刷新數據源值,如下所示:http://stackoverflow.com/questions/14089342/refresh-combobox-items-easiest-way – keyboardP 2013-04-21 23:17:07