2012-09-18 89 views
0

我想,當我以另一種形式(Form2)插入或更新記錄,上Form1DataGridView應自動刷新(調用btnRefresh)每個操作或最好等待,直到所有的更改操作後已完成,並更新DataGridView表格Form2的所有更改的結束事件。調用從另一種形式在C#中的方法

我相信在VB.NET中這是通過Form1.DataGridView.Refresh實現的,但我不確定在C#中。我被告知,我使用屬性將Form1上的DataGridView的引用傳遞給Form2,但由於我是C#的新手,因此我不知道該怎麼做。我該如何解決這個問題?

我的刷新按鈕代碼:

private void btnRefresh_Click(object sender, EventArgs e) 
{ 
    GVThesis.DataSource = thesisRepository.GetThesis(); 
    GVThesis.Refresh(); 
} 
+2

查找到觀察者設計模式 – SimpleVar

回答

2

杉杉,包您刷新代碼到它自己的方法,並調用您的單擊事件處理方法,像這樣:

private void btnRefresh_Click(object sender, EventArgs e) 
    { 
     this.RefreshData(); 
    } 

    public void RefreshData() 
    { 
     GVThesis.DataSource = thesisRepository.GetThesis(); 
     GVThesis.Refresh(); 
    } 

然後,假設你從Form1實例化並啓動了新的Form(Form2),只需進入Form2的代碼並創建一個新的構造函數重載,它將接受對Form1的引用,並將其存儲在一個私有變量中,如下所示:

public partial class Form2 : Form 
{ 
    private Form1 frm1; 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public Form2(Form1 otherForm) 
    { 
     InitializeComponent(); 
     this.frm1 = otherForm; 
    } 
} 

然後你就可以調用「刷新」從任何地方,你在窗體2喜歡像這樣:

this.frm1.RefreshData(); 


編輯:

我創建了一個小樣本,我不能上傳到這裏...但這裏是VS中程序本身的屏幕截圖,以及運行它並執行該功能的結果截圖......希望這會有所幫助。

程序(如果它出現過小放大視圖) The Program in VS 2010


結果: A function on Form1, called from Form2

+0

我用您的解決方案嘗試。 但我得到NullReferenceException是未處理的錯誤。順便說一下,我Form2是這樣的: otherForm Form2 = new otherForm(); Form2.StartPosition = FormStartPosition.CenterParent; Form2.ShowDialog(this); – lozadaOmr

+0

我用一個示例應用程序的幾個屏幕截圖更新了答案,本質上說,我相信你正在嘗試做什麼。已經熟悉並讓我知道你的想法。 – dylansweb

+0

哦,我通過您的評論看到,您需要將對Form1的引用傳遞給構造函數,或者至少將其作爲調用的參數傳遞給Form2。將'this'傳遞給.ShowDialog方法不會成功。仔細看看我發佈的截圖,你應該看到在那裏做的方式。祝你好運! – dylansweb